羣裏最近天天都聊得很嗨,雖然不必定是技術,更多的是生活,仍是很是開心。由於工做、程序只是咱們生命中的一小部分,人的幸福與否,更多的由人的業餘生活和他的精神世界所決定。和一羣陌生的人,扯扯淡,毫無壓力的聊聊人生以爲也挺好。算法
好的,直接奔入主題。狀況是這樣的,羣裏有位同窗問了一道算法,求一個整數的最大質因數。而後他給出了代碼(以下所示),可是測試沒有經過。測試
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