求一个整数的最大质因数(回答一个群友的问题)
群里最近每天都聊得很嗨,虽然不一定是技术,更多的是生活,还是非常开心。因为工作、程序只是我们生命中的一小部分,人的幸福与否,更多的由人的业余生活和他的精神世界所决定。和一群陌生的人,扯扯淡,毫无压力的聊聊人生觉得也挺好。
好的,直接奔入主题。情况是这样的,群里有位同学问了一道算法,求一个整数的最大质因数。然后他给出了代码(如下所示),但是测试没有通过。
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;
}
}
}
一道质数求解的题目,其实也有很多技巧。哇嘎嘎。。。
版权所有,欢迎转载,但是转载请注明出处:潇一