传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2986
筛质数
二分答案
计算[1,mid]中的ans个数,即2^2的倍数-能被别的质数平方整除的数+3^2的倍数-能被别的质数平方整除的数....+...
复杂度计算不能……感觉是sqrt(n)log(n)的……
Code:
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+5;
typedef long long LL;
LL p[maxn];
bool notp[maxn];
LL dfs(int dep,int i,LL mid){
LL ans=0;
for(;i<=p[0]&&p[i]*p[i]<=mid;i++)
ans+=(LL)mid/(p[i]*p[i])*(dep?1:-1)+dfs(dep^1,i+1,mid/(p[i]*p[i]));
return ans;
}
int main(){
for(int i=2;i<maxn;i++){
if(!notp[i])p[++p[0]]=i;
for(int j=1;j<=p[0]&&i*p[j]<maxn;j++){
notp[i*p[j]]=1;
if(i%p[j]==0)break;
}
}
LL l=1,r=1e11;
LL n;cin>>n;
while(l<r){
LL mid=(l+r)>>1;
if(dfs(1,1,mid)<n)l=mid+1;
else r=mid;
}cout<<l<<endl;
return 0;
}