求一个整数的最大质因数(回答一个群友的问题)

 

       群里最近每天都聊得很嗨,虽然不一定是技术,更多的是生活,还是非常开心。因为工作、程序只是我们生命中的一小部分,人的幸福与否,更多的由人的业余生活和他的精神世界所决定。和一群陌生的人,扯扯淡,毫无压力的聊聊人生觉得也挺好。

       好的,直接奔入主题。情况是这样的,群里有位同学问了一道算法,求一个整数的最大质因数。然后他给出了代码(如下所示),但是测试没有通过。

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

 一道质数求解的题目,其实也有很多技巧。哇嘎嘎。。。

 

    版权所有,欢迎转载,但是转载请注明出处:潇一

 

posted @ 2014-05-30 13:22  白来了123  阅读(5656)  评论(13编辑  收藏  举报