求一個整數的最大質因數(回答一個群友的問題)


 

       群里最近每天都聊得很嗨,雖然不一定是技術,更多的是生活,還是非常開心。因為工作、程序只是我們生命中的一小部分,人的幸福與否,更多的由人的業余生活和他的精神世界所決定。和一群陌生的人,扯扯淡,毫無壓力的聊聊人生覺得也挺好。

       好的,直接奔入主題。情況是這樣的,群里有位同學問了一道算法,求一個整數的最大質因數。然后他給出了代碼(如下所示),但是測試沒有通過。

 1 int largest_prime_factor(int n)  2 {  3     while (n >1)  4  {  5         for(int i=2;i<=n;i++)  6  {  7             if(n%i==0)  8  {  9                 n = n/i; 10                 break; 11  } 12             return n; 13  } 14  } 15 }

       第一反應是覺得這個算法肯定是會有些問題的,比如說當n=9時,直接就返回9了。

       仔細思考了一下,發現,這真是一個巧妙的解題思路,只不過沒有控制好邊界條件罷了。改正后:

 1 int largest_prime_factor(int n){  2     if (n<1){//  3         return -1;  4  }  5     if (n==1){//判斷邊界條件  6         return 1;  7  }  8     while (n >1){  9         for(int i=2;i<=n;i++){ 10             if (n==i){//到達n了,就沒有繼續的必要了,已經最大 11                 return n; 12  } 13             if(n%i==0){// 14                 n = n/i; 15                 break; 16  } 17  } 18  } 19 }

       自己測試過,沒有問題。

       其實,當我第一次看到這道題的時候,我的思路是兩個for循環。但是好像沒有上面的效率高。代碼如下:

      

bool isZhiSu(int n){//是否是質數,是質數返回true for(int i=2;i<n;i++){ if (n%i==0){ return false; } } return true; } int largest_prime_factor2(int n){ if (n<1){ return -1; } for (int i=n;i>=1;i--){ if (n%i==0&&isZhiSu(i)){//判斷是否能被N整除,並且是質素 return i; } } }

 一道質數求解的題目,其實也有很多技巧。哇嘎嘎。。。

 

    版權所有,歡迎轉載,但是轉載請注明出處:瀟一

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM