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


 

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

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

 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