【疑】poj 2773 Happy 2006 互素问题(★★☆☆☆)
2011-04-28 14:42
465 查看
http://poj.org/problem?id=2773
题意:给定一个正整数,求与其互素的第K个整数。
在这里要说一下什么叫互素:如果两个正整数X和Y的最大公约数为1,那么就说X与Y互素。
这个用普通算法很容易超时,而有有些算法又篇幅较大。最后终于搜到一篇特别巧妙的算法,感觉自己一定要加强数学方面的学习。这个算法的核心代码有点不容易理解,想了半天也没弄的十分明白。有高手路过,请指点迷津!!!
Sample Input
Sample Output
Source Code
引自:http://blog.sina.com.cn/s/blog_70d4bfdf0100o76d.html
题意:给定一个正整数,求与其互素的第K个整数。
在这里要说一下什么叫互素:如果两个正整数X和Y的最大公约数为1,那么就说X与Y互素。
这个用普通算法很容易超时,而有有些算法又篇幅较大。最后终于搜到一篇特别巧妙的算法,感觉自己一定要加强数学方面的学习。这个算法的核心代码有点不容易理解,想了半天也没弄的十分明白。有高手路过,请指点迷津!!!
Sample Input
2006 1 2006 2 2006 3
Sample Output
1 3 5
Source Code
#include <iostream> //求出<=m的互质的 大于m的都是在上面加m的倍数 using namespace std; int prime[1000000]; int gcd(int n,int m) { if(n<m) swap(n,m); int r; while(m!=0) { r=n%m; n=m; m=r; } return n; } int main() { int m,k,i,j; while(cin>>m>>k) { j=0; for(i=1;i<=m;++i) //不能写成i<m,因为要考虑m==1的情况 if(gcd(m,i)==1) prime[++j]=i; if(k%j==0) //要另外处理 k%j==0 cout<<m*(k/j-1)+prime[j]<<endl; else cout<<m*(k/j)+prime[k%j]<<endl; } return 0; }
引自:http://blog.sina.com.cn/s/blog_70d4bfdf0100o76d.html
相关文章推荐
- POJ 2773 Happy 2006 【数论,容斥原理+二分】
- POJ 2773 Happy 2006(数论)
- POJ 2773:Happy 2006 - 第k大与n互素的数
- poj 2773 Happy 2006
- POJ 2773-Happy 2006(欧拉函数)
- POJ 2773 Happy 2006 欧拉函数
- POJ2773 Happy 2006【容斥原理】
- Happy 2006 - POJ 2773 欧几里得
- poj 2773 Happy 2006
- POJ 2773 Happy 2006 (容斥原理+二分)
- Happy 2006 POJ - 2773 数论
- POJ - 2773 Happy 2006 (互素的一点性质)
- POJ-2773-Happy 2006 解题报告
- poj 2773 Happy 2006
- POJ 2773 Happy 2006
- POJ 2773 Happy 2006 (容斥)
- POJ 2773 Happy 2006
- POJ_2773_Happy 2006_ 欧几里得算法
- poj 2773 Happy 2006(数论:欧拉函数)
- 【容斥原理】【poj 2773】Happy 2006