【BZOJ】【P2440】【中山市选2011】【完全平方数】【题解】【莫比乌斯反演】

来源:互联网 发布:单片机plc哪个好学 编辑:程序博客网 时间:2024/04/30 08:33

传送门:www.lydsy.com/JudgeOnline/problem.php?id=2440

还不是很会,先放着代码

Code:

#include<cstdio>#include<iostream>#include<algorithm>#include<cmath>using namespace std;const int maxn=1e5+10;typedef long long lld;lld u[maxn],prime[maxn];lld T;bool ok[maxn];void getmu(){u[1]=1;for(int i=2;i<maxn;i++){if(!ok[i]){prime[++prime[0]]=i;u[i]=-1;}for(int j=1;j<=prime[0];j++){if(i*prime[j]>=maxn)break;ok[i*prime[j]]=1;if(i%prime[j])u[i*prime[j]]=-u[i];else{u[i*prime[j]]=0;break;}}}}lld calc(lld x){lld sum=0,sq=sqrt(x);for(int i=1;i<=sq;i++)sum+=u[i]*(x/(i*i));return sum;}lld work(lld x){lld l=0,r=x*2;while(l<r){lld mid=(l+r)>>1;if(calc(mid)>=x)r=mid;elsel=mid+1;}return l;}int main(){scanf("%lld",&T);getmu();while(T--){lld x;scanf("%lld",&x);printf("%lld\n",work(x));}return 0;}

0 0
原创粉丝点击