内蒙的蒟蒻求助,考场上暴力的,回来写完自我感觉良好(,感觉这样二分没什么问题。。交到自测里只有十分。。剩余全wa
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll qmi(ll x,int ti)
{
ll ans=1;
while(ti>0)
{
if(ti&1)
{
ans=(ans*x);
}
ti>>=1;
x=(x*x);
}
return ans;
}
int k;
ll n;
bool o;
int vis[65];
int main()
{
scanf("%lld",&n);
scanf("%d",&k);
ll ans=0;
if(k==1)
{
printf("%lld",n);
o=true;
}
if(k>=60)
{
printf("0");
o=true;
}
int l=1;
int r=60;
while(l<r)
{
if(o)
{
break;
}
int mid=(l+r)/2;
if(qmi(2,mid)>n)
{
r=mid-1;
}
else
{
l=mid+1;
}
}
int maxn=l;
for(int i=k;i<=maxn;i++)
{
if(o)
{
break;
}
if(vis[i]==1)
{
continue;
}
int l=1;
int r=n/2;
while(l<r)
{
int mid=(l+r)/2;
if(qmi(mid,i)>n)
{
r=mid;
}
else
{
l=mid+1;
}
}
// printf("%d %d\n",i,l);
l-=2;
if(vis[i]==0)
{
ans+=l;
for(int j=i;j<=maxn;j+=i)
{
vis[j]++;
}
}
else
{
ans-=(vis[i]-1)*l;
}
}
ans+=1;
if(!o)
{
printf("%lld",ans);
}
return 0;
}