|
2鱼币
题目:编写一个程序,求解 600851475143 的最大质数因子是多少?
(每个合数都可以写成几个质数(素数)相乘的形式,这几个质数就都叫做这个合数的质数因子。
比如 13195 的质数因子有 5, 7, 13 和 29。)
1.能否说下该如何设计该程序?(解题思路)
2.解析下答案为何要这样做?(越全面越好)
答案:
#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", i);
return 0;
}
第1问,如果是我,我会这样做。用一个for循环i从一到原来的那个数,看i是不是原来的数的因数,如果是那就break。那么i一定是一个质数。用原来的数除以i,得到一个新的数。编写一个函数,用来检测一个数是否是质数。检测新的数是否是质数,如果不是,重复上述操作,只要把原来的数换成新的数。如果新的数是质数(新的数肯定比被除掉的数更大),那么新的数就是所求的解(所以新的数是最大的因数)。第2问,那个代码好像就是这种意思。(当你遇到一段代码的时候,先想想自己会怎么做。然后按照你自己的想法推测于原来的代码的作用,你就看得懂代码了)
|
最佳答案
查看完整内容
第1问,如果是我,我会这样做。用一个for循环i从一到原来的那个数,看i是不是原来的数的因数,如果是那就break。那么i一定是一个质数。用原来的数除以i,得到一个新的数。编写一个函数,用来检测一个数是否是质数。检测新的数是否是质数,如果不是,重复上述操作,只要把原来的数换成新的数。如果新的数是质数(新的数肯定比被除掉的数更大),那么新的数就是所求的解(所以新的数是最大的因数)。第2问,那个代码好像就是这种意思。(当你遇 ...
|