POJ 2773 欧拉函数
来源:互联网 发布:mac怎么进硬件检测模式 编辑:程序博客网 时间:2024/06/06 13:20
题意:让求从1开始第k个与m互素的数。
求最大公约数的第一步是用大数对小数取余。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 <iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;long long phi(long long n){ long long rea=n; for(int i=2; i*i<=n; i++) if(n%i==0) { rea=rea-rea/i; do n/=i; while(n%i==0); } if(n>1) rea=rea-rea/n; return rea;}long long gcd(long long a,long long b){ if(!b) return a; return gcd(b,a%b);}int main(){ long long m,k,ans; while(~scanf("%I64d%I64d",&m,&k)) { if(m==1) { printf("%I64d\n",k); continue; } int b=phi(m),now=k/b; if(k%b==0)now--; for(long long i=now*m,num=0; i<(now+1)*m; i++) { if(gcd(i,m)==1) num++; if(num+now*b==k) { ans=i; break; } } printf("%I64d\n",ans); } return 0;}
- poj 2773(欧拉函数)
- POJ 2773 欧拉函数
- POJ 2773 欧拉函数, 素数表
- POJ 2773 Happy 2006 欧拉函数
- POJ 2773-Happy 2006(欧拉函数)
- POJ - 2478 欧拉函数..
- poj 2478 欧拉函数
- poj 3696 欧拉函数
- poj 3090 欧拉函数
- poj 2478 欧拉函数
- POJ 3090 欧拉函数
- poj-1284 欧拉函数
- poj 2407 欧拉函数
- POJ 3696 欧拉函数
- POJ-2407 欧拉函数
- POJ-2478 欧拉函数
- POJ 2773 Happy 2006 欧拉函数的应用
- poj 2773 Happy 2006(欧拉函数应用)
- codec 增加lib库的参考
- 谈谈从开始工作到现在的一些经历
- wav文件格式分析详解
- UA信息
- IE中使用Google Chrome Frame运行HTML 5
- POJ 2773 欧拉函数
- erlang lists 系列函数功能与用法详解(共68个函数)
- IOS-处理异常崩溃(摘自iPhone Tutorials)
- POJ2632
- Myeclipse8.5搭建jbpm4.4的开发环境
- android之Notification通知
- 【Flex】IE中清除swf缓存
- JAVA实现输出100到200之间的素数
- 转自看雪——Hackshield内幕(thisIs)