记录编号 | 246174 | 评测结果 | AAAAAAAAAA | ||
---|---|---|---|---|---|
题目名称 | [vijos1889]天真的因数分解 | 最终得分 | 100 | ||
用户昵称 | 是否通过 | 通过 | |||
代码语言 | C++ | 运行时间 | 0.913 s | ||
提交时间 | 2016-04-05 15:50:45 | 内存使用 | 6.51 MiB | ||
#include<cstdio> #include<cmath> #include<iostream> using namespace std; typedef long long LL; const int SIZEN=500005; bool mark[SIZEN]={0}; int prime[SIZEN]; LL mu[SIZEN]; int cnt=0; void prepare() { for(int i=2;i<SIZEN;i++) { if(!mark[i]) prime[++cnt]=i,mu[i]=1; for(int j=1;j<=cnt&&i*prime[j]<SIZEN;j++) { mark[prime[j]*i]=1; if(i%prime[j]==0) { mu[i*prime[j]]=0; break; } mu[i*prime[j]]=-mu[i]; } } } LL calc(LL x) { LL t=sqrt(x+1.0); LL sum=0; for(LL i=2;i<=t;i++) sum+=x/(i*i)*mu[i]; return sum; } LL K; int main() { freopen("naive.in","r",stdin); freopen("naive.out","w",stdout); prepare(); scanf("%lld",&K); LL l=K,r=1e11; while(l<r) { LL mid=(l+r)/2; if(calc(mid)>=K) r=mid; else l=mid+1; } printf("%lld",r); return 0; }