https://www.luogu.com.cn/problem/P4318
二分,判定1-mid内有多少完全平方数的倍数
容斥原理,容斥系数就是莫比乌斯函数
#include<cstdio> using namespace std; #define N 100000 int pr[N],miu[N],tot; bool vis[N]; void pre() { for(int i=2;i<N;++i) { if(!vis[i]) { pr[++tot]=i; miu[i]=-1; } for(int j=1;j<=tot && pr[j]*i<N;++j) { vis[pr[j]*i]=true; if(!(i%pr[j])) break; miu[pr[j]*i]=-miu[i]; } } } int check(int n) { int sum=0; for(int i=2;i*i<=n;++i) sum-=miu[i]*(n/(i*i)); return n-sum; } int main() { pre(); int T,k,l,r,mid,ans; scanf("%d",&T); while(T--) { scanf("%d",&k); l=1; r=k*2; while(l<=r) { mid=1ll*l+r>>1; if(check(mid)<k) l=mid+1; else { ans=mid; r=mid-1; } } printf("%d ",ans); } }