-
A - Eddy's爱好
- HDU - 2204
- 题意:要你输出1到n中,能够表示成a^b的数,a,b都是大于0的整数的个数,其中b大于1。
- 思路:算一下 1-n中每个数 进行大于1的次方 不超过n 的个数。会有重复,利用莫比乌斯函数系数进行容斥即可 。
-
#include<bits/stdc++.h> using namespace std; #define ll long long ll n,ans,sum[11111]; ll mu[11111],prime[11111]; bool ok[10100]; void getphi() { memset(mu,-1,sizeof(mu)); memset(ok,0,sizeof(ok)); mu[1]=1; int id=0; for(int i=2; i<=70; i++) { if(!ok[i])prime[++id]=i; for(int j=1; j<=id&&i*prime[j]<=70; j++) { ok[i*prime[j]]=1; if(i%prime[j]==0) { mu[i*prime[j]]=0; break; } else mu[i*prime[j]]=-mu[i]; } } } int main() { getphi(); while(~scanf("%lld",&n)) { ans=1; for(int i=2; i<=70; i++) { sum[i]=powl(n,1./i); sum[i]--; } for(int i=2; i<=70; i++) { if(sum[i]<1)break; ans=ans-sum[i]*mu[i]; } printf("%lld\n",ans); } return 0; }
A - Eddy's爱好 HDU - 2204 -莫比乌斯函数-容斥原理
最新推荐文章于 2019-05-08 12:40:23 发布