SP4168 题解
Rolling_star · · 题解
发现这个东西其实就是:
观察到一个数
但是这样会算重,因为含平方因子数会继续算,所以只考虑无平方因子数的影响,发现这就是
所以答案即为
因为
时间复杂度为
Code:
#include<bits/stdc++.h>
#define int long long
#define N 10000005
using namespace std;
int tot,pri[N],inp[N],mu[N];
signed main(){
mu[1]=1;
for(int i=2;i<=N-5;i++){
if(!inp[i]) pri[++tot]=i,mu[i]=-1;
for(int j=1;j<=tot&&pri[j]*i<=N-5;j++){
inp[pri[j]*i]=true;
if(!(i%pri[j])) break;
mu[pri[j]*i]=-mu[i];
}
mu[i]+=mu[i-1];
}
int t;cin>>t;
while(t-->0){
int n,ans=0;
scanf("%lld",&n);
for(int l=1,r;l<=n;l=r+1){
if(n/(l*l)==0) break;
r=__builtin_sqrt(n/(n/(l*l)));
ans+=(mu[r]-mu[l-1])*(n/(l*l));
}
printf("%lld\n",ans);
}
}