poj 2773 欧几里德算法
来源:互联网 发布:服务器架构图 软件 编辑:程序博客网 时间:2024/06/05 04:51
题意:给出m,k,求第k小的与m互质的数。
分析:根据gcd的求法,我们可知,求最大公约数的第一步是用大数对小数取余。gcd(a,b)==gcd(a%b,b),进一步推出gcd(a,b)==gcd(a+b, b)。也就是说,当求出了1~m间与m互质的数之后,把这些数加上m就可以得到m~2m间的与m互质的数。而且m~2m间不会有某个与m互质的数被漏掉。因为如果m<=a<=2m,且gcd(a, m)==1,那么gcd(a - m, m)必然等于1。也就是必然有个在1~m间的数a-m,可以通过加m的方式得到a。所以与m互质的数是有周期性的。我们只需要求出第一个周期即可。
解题代码:
#include<stdio.h>#include<string.h>#include<math.h>#include<stdlib.h>#include<algorithm>using namespace std;#define N 1000000int pri[N];int gcd(int a,int b){ return b==0?a:gcd(b,a%b);}int main(){ int n,k; while(~scanf("%d %d",&n,&k)) { int j=0; for(int i=1;i<=n;i++) if(gcd(i,n)==1) pri[j++]=i; if(k%j!=0) printf("%d\n",k/j*n+pri[k%j-1]); else printf("%d\n",(k/j-1)*n+pri[j-1]); } return 0;}
0 0
- poj 2773 欧几里德算法
- POJ 1061 拓展欧几里德算法
- POJ 1061 扩展欧几里德算法
- POJ 2773 欧几里德
- poj 2115 C Looooops 扩展欧几里德算法
- poj 1061 (扩展欧几里德算法)
- POJ-2115-C Looooops-扩展欧几里德算法
- POJ 2115-C Looooops-扩展欧几里德算法
- poj 2142 The Balance(扩展欧几里德算法)
- C Looooops poj 2142 扩展欧几里德算法
- poj 2115 C Looooops(扩展欧几里德算法)
- POJ 2773 Happy 2006 (分解质因数+容斥+二分 或 欧几里德算法应用)
- 欧几里德算法
- 欧几里德算法
- 欧几里德算法
- 欧几里德算法
- 欧几里德算法
- 欧几里德算法
- web 项目 命名规范
- java foreach
- [小技巧] echo *
- CentOS 6.4 文件系统只读故障
- linux查找目录下的所有文件中是否含有某个字符串 .
- poj 2773 欧几里德算法
- Android开发教程:数据存取之SQLite浅析
- Codeforces Round #262(div2) C. Present
- eclipse freemarker 插件 地址
- aop实现
- EDOM格式如何在ArcMap里显示
- android事件分发机制dispatch
- Activity之间的切换效果
- css中判断IE版本的语句