题目链接:https://vjudge.net/contest/265962#problem
思路:ans=1+n^(1/2)+n^(1/3)+.......n(1/sqrt(n)).
n很大,所以打一个素数表,用来枚
#include<iostream>
#include<algorithm>
#include<math.h>
#include<string.h>
#include<stdio.h>
#define LL long long
using namespace std;
LL n,prime[]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61};
int main()
{
while(cin>>n)
{
LL ans=1,cut;
for(int i=0;i<18;i++)
{
cut=(LL) pow(n,1.0/prime[i]);
if(cut<2) break;
ans+=cut-1;
for(int j=i+1;j<=18;j++)
{
cut = (LL) pow(n,1.0/(prime[i]*prime[j]));
if(cut<2) break;
ans-=cut-1;
for(int k=j+1;k<=18;k++)
{
cut=(LL) pow(n,1.0/(prime[i]*prime[j]*prime[k]));
if(cut<2)break;
ans+=cut-1;
}
}
}
cout<<ans<<endl;
}
}
举所有的数