|
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);
复制代码
|
|