写了个深搜+剪枝,结果全屏TLE。。。
#include<bits/stdc++.h>
using namespace std;
int n,m;
long long ans,t[110];
void dfs(int now,int gcd){
if(gcd==1){
ans+=t[n-now+1];
return;
}
if(now>n) return;
for(int i=1;i<=m;i++) dfs(now+1,__gcd(gcd,i));
}
int main(){
scanf("%d%d",&n,&m);
if(m==1){
printf("1");
return 0;
}
t[0]=1;
for(int i=1;i<=n;i++) t[i]=t[i-1]*m;
dfs(1,m);
printf("%lld",ans);
return 0;
}