博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 2773 Happy 2006【GCD/欧拉函数】
阅读量:4979 次
发布时间:2019-06-12

本文共 639 字,大约阅读时间需要 2 分钟。

根据欧几里德算法,gcd(a,b)=gcd(a+b*t,b)

如果a和b互质,则a+b*t和b也互质,即与a互质的数对a取模具有周期性。

所以只要求出小于n且与n互质的元素即可。

#include
#include
const int N=1000100;int pr[N],cnt; int gcd(int a,int b){ if(!b) return a; return gcd(b,a%b);}int main(){ int n,k; while(~scanf("%d%d",&n,&k)){ cnt=0; for(int i=1;i<=n;i++){ if(gcd(n,i)==1) pr[++cnt]=i; } if(k%cnt) printf("%d\n",k/cnt*n+pr[k%cnt]); else printf("%d\n",(k/cnt-1)*n+pr[cnt]); } return 0;}

也可以用欧拉函数求小于n且与n互质的元素。就不用O(N)了。速度提高10倍左右。

转载于:https://www.cnblogs.com/L-King/p/5718784.html

你可能感兴趣的文章
出现Data Tools 与VS 不兼容问题
查看>>
CSS实例:图片导航块
查看>>
SQL CASE 语句
查看>>
第十三周总结
查看>>
HOJ13907 Diana and the Golden Apples
查看>>
抽象类实现接口
查看>>
记一次失败的面试
查看>>
微服务
查看>>
禁止移动端safari浏览器双击放大事件
查看>>
Socket编程的面纱
查看>>
CSS hack方式一览
查看>>
sublime text3 注册码
查看>>
Linux ps命令详解与示例说明
查看>>
最简单的git 用法
查看>>
剑指offer--面试题20
查看>>
Lombok使用与原理
查看>>
Masonry介绍与使用实践(快速上手Autolayout)
查看>>
struts标签库
查看>>
中文词频统计
查看>>
boost::lockfree::stack
查看>>