Solution
当 f[i]表示满足 gcd(k1,k2,k3…)=i的 x个数
假设没有任何限制,那么 2k1⋅3k2⋅5k3...可以表示所有数
所以 2k1i⋅3k2i⋅5k3i...可以表示 gcd(k1,k2,k3…)==0(modi)的 x个数
Code
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int T,i,j;
ll ans,f[60],n;
int main(){
scanf("%d",&T);
for (;T--;){
scanf("%lld",&n);
ans=n-1;
for (i=59;i>1;i--){
f[i]=pow(n,1.0/i)-1;
for (j=i+i;j<60;j+=i) f[i]-=f[j];
ans-=f[i];
}
printf("%lld\n",ans);
}
}