#include<bits/stdc++.h>
#define int __int128
//#define endl '\n'
using namespace std;
const int mod=1e9+7,inf=0x3f3f3f3f3f3f3f3f;
const int Max=38,N=12;
int pm[20]={0,2,3,5,7,11,13,17,19,23,29,31,37};
int base[20],ans;
int n;
int fp(int x,int p)//x^p<=n
{
int ans=1;
for ( int i = 1 ; i <= p ; i++ )
{
ans*=x;
if(ans>n)return 0;
}
return 1;
}
int getans(int x)
{
int l=2,r=n;
if(!fp(2,x))return 1;
while(l<r)
{
int mid=(l+r+1)/2;
if(fp(mid,x))l=mid;
else r=mid-1;
}
// cout << "sqrt" << x << " " << n << "=" << l << endl;
return l;
}
int calc()
{
int flag=-1,cnt=1;
for ( int i = 1 ; i <= N ; i++ )
{
if(base[i])
{
flag*=-1;
cnt*=pm[i];
}
}
if(cnt==1)return 0;
// for ( int i = 1 ; i <= N ; i++ )cout << base[i];
// cout << endl;
// cout << "ans=" << flag*(getans(cnt)-1) << endl;
return flag*(getans(cnt)-1);
}
void dfs(int x)
{
// cout << "dfs" << x << endl;
if(x==N+1)return ans+=calc(),void();
base[x]=0;
dfs(x+1);
base[x]=1;
dfs(x+1);
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
long long read;
cin >> read;
n=read;
dfs(1);
read=ans+1;
cout << read;
return 0;
}
过不去样例2