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

 

       羣裏最近天天都聊得很嗨,雖然不必定是技術,更多的是生活,仍是很是開心。由於工做、程序只是咱們生命中的一小部分,人的幸福與否,更多的由人的業餘生活和他的精神世界所決定。和一羣陌生的人,扯扯淡,毫無壓力的聊聊人生以爲也挺好。算法

       好的,直接奔入主題。狀況是這樣的,羣裏有位同窗問了一道算法,求一個整數的最大質因數。而後他給出了代碼(以下所示),可是測試沒有經過。測試

 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了。spa

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

 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 }

       本身測試過,沒有問題。blog

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

      

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; } } }

 一道質數求解的題目,其實也有不少技巧。哇嘎嘎。。。for循環

 

    版權全部,歡迎轉載,可是轉載請註明出處:瀟一class

相關文章
相關標籤/搜索