HDU 2204 Eddy's爱好 (容斥原理)
来源:互联网 发布:熊片数据库正式版网址 编辑:程序博客网 时间:2024/06/08 19:57
https://vjudge.net/contest/177343#problem/A- Eddy’s爱好
感觉用dfs不太好看。。
但是这里面的原理还是要知道的。这种写法应该也挺普遍的
参考http://www.cnblogs.com/jackge/archive/2013/04/02/2995080.html
我们可以由n^(1/p),知道指数为p的有多少个数。
通过观察,可以发现若一个数可以表示成x^(k*t),则可以表示成(x^k)^t。因此指数必然为素数
int prime[20],pn;bool flag[60];LL n,sum;void getprime(){ pn=0; mem(flag,true); for(int i=2;i<=60;++i){ if(flag[i]){ prime[pn++]=i; for(int j=i+i;j<=60;j+=i) flag[j]=false; } }}void dfs(int i,int j,LL p){ if(p>61)return ;//使得 if(i==pn){ if(j==0)sum+=(LL)(pow((double)n,1.0/(double)p)+eps)-1; return ; } dfs(i+1,j,p); if(j>0)dfs(i+1,j-1,p*prime[i]);}int main(){ getprime();LL ans; while(~sf("%lld",&n)){ ans=0; for(int i=1;i<pn;++i){ sum=0; dfs(0,i,1); if(i%2==1)ans+=sum; else ans-=sum; } cout<<ans+1<<'\n'; }}
换一个写法。:
int main(){ getprime();LL ans; while(~sf("%lld",&n)){ ans=0; LL g=1<<18; for(int i=1;i<g;++i){ int cnt=0,k=i; LL base=1; for(int j=0;j<18;++j){ if(k%2)cnt++,base*=prime[j]; k>>=1; } if(cnt>3)continue; if(cnt%2)ans+=(LL)(pow(n,1.0/base)+eps)-1; else ans-=(LL)(pow(n,1.0/base)+eps)-1; } cout<<ans+1<<'\n'; }}
也可以暴力枚举。,再讨论4种素数在一起的是没有意义的,因为不会再那个范围呢。。
long long n,tmp; getPrime(); while(cin>>n){ int ans=1; for(int i=1;i<=prime[0];i++){ tmp=(long long)(pow((double)n,1.0/prime[i])+eps); //不加eps则WA if(tmp==1) //减枝,下同 break; ans+=tmp-1; } for(int i=1;i<=prime[0];i++) for(int j=i+1;j<=prime[0];j++){ tmp=(long long)(pow((double)n,1.0/(prime[i]*prime[j]))+eps); if(tmp==1) break; ans-=(tmp-1); } for(int i=1;i<=prime[0];i++) for(int j=i+1;j<=prime[0];j++) for(int k=j+1;k<=prime[0];k++){ tmp=(long long)(pow((double)n,1.0/(prime[i]*prime[j]*prime[k]))+eps); if(tmp==1) break; ans+=(tmp-1); } printf("%d\n",ans); }
阅读全文
0 0
- HDU 2204 Eddy's爱好(容斥原理)
- hdu 2204 Eddy's爱好(容斥原理)
- hdu-2204-Eddy's爱好(容斥原理)
- hdu 2204 Eddy's爱好 (容斥原理)
- 【HDU】2204 Eddy's爱好 容斥原理
- [容斥原理] hdu 2204 Eddy's爱好
- HDU 2204 - Eddy's爱好 (容斥原理)
- hdu 2204 Eddy's爱好 容斥原理
- hdu 2204 Eddy's爱好 (数论,容斥原理)
- hdu 2204 Eddy's爱好(容斥原理)
- HDU 2204Eddy's爱好(数论,容斥原理)
- hdu 2204 Eddy's爱好 容斥原理
- HDU 2204 - Eddy's爱好- 容斥原理
- hdu 2204 Eddy's爱好 [容斥原理]【组合数学】
- HDU 2204 Eddy's爱好(容斥原理)
- HDU 2204 Eddy's爱好 (容斥原理)
- hdu 2204 Eddy's爱好(容斥原理)
- HDU 2204 Eddy's爱好 容斥
- CF838A-Binary Blocks
- 钉钉的自动打卡上下班辅助android软件
- Android NDK系列(一)-AS使用javah生成so文件
- IOS设置NavigationBar的颜色以及透明度
- eclipse 查询快捷方式
- HDU 2204 Eddy's爱好 (容斥原理)
- collention和collentions
- 使用J2SE API读取Properties文件的六种方法
- 【C++】严重性代码说明项目文件行错误
- OpenCV探索之路(一):win10 X64+VS2015+opencv3.10安装教程
- Linux常用操作指令总结1
- html5制作圆形
- Unity3D 5.3 新版AssetBundle使用方案及策略
- springmvc问题点