| 
 | 
 
60鱼币 
 本帖最后由 zyxzyx。 于 2022-5-26 21:16 编辑  
 
. 编写一个程序,求解 600851475143 的最大质数因子是多少? 
上面这个是题目 
 
 
/*先判断是不是除数,在判断除数是不是质数*/ 
 
#include<stdio.h> 
int main() 
{ 
    long long i,d,a,re,sum=600851475143; 
    _Bool flag=1; 
    for(i=2;i<sum;i++) 
    { 
        if(sum%i==0) 
        { 
             
            for(a=2;a<=i/2;a++) 
            { 
                if(i%a==0) 
                { 
                    flag=0; 
                    break; 
                } 
 
            } 
            if(flag) 
            { 
                re=i; 
            } 
            else 
            { 
                flag=1; 
            } 
        } 
    } 
printf("%d",re); 
return 0; 
} 
这个是我的代码,但是我运行代码迟迟没有结果,当我把sum的值改小,就是去求一个更小的数的最大质因数的时候就可以出结果, 
我觉得可能是我算法上的缺陷,但是我不知道我的算法比答案代码的算法差在哪里。求解答 
下面是答案的代码 
#include <stdio.h> 
#include <math.h> 
 
int main() 
{ 
        long long i, j, k, l, num = 600851475143; 
        _Bool flag = 1; 
 
        for (i = 2, j = num/i; flag != 0; i++, j = num/i, flag = 1) 
        { 
                if (i * j == num) 
                { 
                        k = sqrt((double)j); 
                        for (l = 2; l <= k; l++) 
                        { 
                                if (j % l == 0) 
                                { 
                                        flag = 0; 
                                        break; 
                                } 
                        } 
                        if (flag) 
                        { 
                                break; 
                        } 
                } 
        } 
        printf("%lld\n", j); 
        return 0; 
} 
 本帖最后由 jhq999 于 2022-5-26 23:00 编辑 
- long long i=0,sum=600851475143;
 
 -     for(i=2;i<sum;i++)
 
 -     {
 
 -         if(sum%i==0)
 
 -         {
 
 -             sum=sum/i;
 
 -             i=1;
 
 -         }
 
 -     }
 
 -     printf("%lld",sum);
 
  复制代码 
 
 
 |   
 
 
 
 
 
 |