2986: Non-Squarefree Numbers
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 337 Solved: 156Description
一个正整数K被称为squarefree,如果它没有一个D^2(D>1)这样的约数。
Input
读入一个正整数N
Output
找出第N个不是squarefree的数。1<=N<=10^10
Sample Input
10Sample Output
27Hint
前10个非squarefree的数
4 8 9 12 16 18 20 24 25 27HINT
Source
【分析】
跟这题一模一样->传送门
【第一次二分打错。。
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define Maxm 1000010
#define LL long long LL pri[Maxm],pl,mu[Maxm];
bool vis[Maxm];
void init()
{
for(LL i=;i<=Maxm-;i++)
{
if(!vis[i]) pri[++pl]=i,mu[i]=-;
for(LL j=;j<=pl;j++)
{
if(pri[j]*i>Maxm-) break;
vis[pri[j]*i]=;
if(i%pri[j]==) mu[pri[j]*i]=;
else mu[i*pri[j]]=-mu[i];
if(i%pri[j]==) break;
}
}
} LL n;
bool check(LL x)
{
LL ans=;
for(LL i=;i*i<=x;i++)
{
ans+=x/(i*i)*(-mu[i]);
}
return ans>=n;
} int main()
{
init();
scanf("%lld",&n);
LL l=,r=30000000000LL;
while(l<r)
{
LL mid=(l+r)>>;
if(check(mid)) r=mid;
else l=mid+;
}
printf("%lld\n",l);
return ;
}
2017-04-20 20:20:29