1 条题解
-
1
#include<bits/stdc++.h> #define ll long long using namespace std; ll n,m,k,s,t,f[105],ans; ll qpow(ll a,ll b){//计算a的b次方 ll tmp=1; for (int i=1;i<=b;++i){ if (n/tmp<a) return n+1; tmp*=a; } return tmp; } ll sq(ll n,ll k){//开方 ll l=1,r=n,mid; while (l<=r){ mid=(l+r)>>1; if (qpow(mid,k)<=n) l=mid+1; else r=mid-1; } return r; } int main(){ cin>>n>>k; for (int i=100;i>=1;--i){ f[i]=sq(n,i)-1;//开方计算能用a^i表示的数的个数 for (int j=2*i;j<=100;j+=i) f[i]-=f[j];//依次减去能用a^2i,a^3i...表示的数 } ans=n-1; for (int i=1;i<k;++i) ans-=f[i]; cout<<ans+1; }
- 1
信息
- ID
- 297
- 时间
- 1000ms
- 内存
- 1024MiB
- 难度
- 3
- 标签
- 递交数
- 50
- 已通过
- 28
- 上传者