#include <iostream>
#include <cmath>
using namespace std;
#define N 100
typedef __int64 LL;
LL n;
int prime[N];
bool is[N];
void creat()
{
memset(prime,0,sizeof(prime));
int k=0;
prime[k++]=2;
for(int i=4;i<N;i+=2) is[i] =1 ;
for(int i=3;i<N;i+=2)
{
if(!is[i])
{
prime[k++]= i;
for(int j = 2*i;j<N;j+=i)
is[j] =1 ;
}
}
}
int pows(LL n,int k)
{
double s = pow(n*1.0,1.0/k);
int ks = (int)s;
return ks;
}
void init()
{
creat();
while(scanf("%I64d",&n)!=EOF)
{
int ans = 0;
for(int i=0;;i++)
{
int k = pows(n,prime[i]*1.0);
if(k==1) break;
ans += k-1;
}
for(int i=0;;i++)
{
int j;
for( j=i+1;;j++)
{
int k = pows(n,prime[i]*prime[j]);
if(k==1) break;
ans -= (k-1);
}
if(j==i+1) break;
}
for(int i=0;;i++)
{
int j;
for( j=i+1;;j++)
{
int k;
for( k=j+1;;k++)
{
int var = pows(n,prime[i]*prime[j]*prime[k]);
if(var==1) break;
ans += (var-1);
}
if(k==j+1) break;
}
if(i==j-1) break;
}
printf("%d\n",ans+1);
}
}
int main()
{
init();
return 0;
}
hdu 2204
最新推荐文章于 2020-02-20 22:20:18 发布