【疑】poj 2773 Happy 2006 互素问题(★★☆☆☆)
生活随笔
收集整理的這篇文章主要介紹了
【疑】poj 2773 Happy 2006 互素问题(★★☆☆☆)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
http://poj.org/problem?id=2773
題意:給定一個正整數,求與其互素的第K個整數。
在這里要說一下什么叫互素:如果兩個正整數X和Y的最大公約數為1,那么就說X與Y互素。
這個用普通算法很容易超時,而有有些算法又篇幅較大。最后終于搜到一篇特別巧妙的算法,感覺自己一定要加強數學方面的學習。這個算法的核心代碼有點不容易理解,想了半天也沒弄的十分明白。有高手路過,請指點迷津!!!
?
Sample Input
2006 1 2006 2 2006 3Sample 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==0cout<<m*(k/j-1)+prime[j]<<endl;elsecout<<m*(k/j)+prime[k%j]<<endl;}return 0;}引自:http://blog.sina.com.cn/s/blog_70d4bfdf0100o76d.html
轉載于:https://www.cnblogs.com/pcwl/archive/2011/04/28/2031754.html
總結
以上是生活随笔為你收集整理的【疑】poj 2773 Happy 2006 互素问题(★★☆☆☆)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: POJ 1611 The Suspect
- 下一篇: ubuntu重置面板