求一个数的最大质因数,初始化循环条件我不太懂
#include <stdio.h>#include <math.h>
int main()
{
unsigned long long i, j, k, max, temp, num = 600851475143;
_Bool flag = 1;
temp = (unsigned long long)sqrt((double)num);
for (i = 2; i <= temp; i++)
{
k = (unsigned long long)sqrt((double
for (j = 2; j <= k; j++)
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag && !(num % i))
{
max = i;
}
else
{
flag = 1;
}
}
printf("%llu\n", max);
return 0;
}
[b temp = (unsigned long long)sqrt((double)num);
for (i = 2; i <= temp; i++)
为什么要这样循环呢,而不是for(i=2; i<num ;i++) ,我们知道 10的最大质因数是 5> √10=3????????
而我从另一方面改进算法不知道是否有缺陷,是这样的
初始循环条件改为 for(i=2; i<num ;i++)
在循环内部,判断完 i 是否为质数以后,if语句改为
if(flag&&!( num%i))
{
max =i;
num/=i;
}
从这方面缩短迭代的步长。 主要解决 迭代结束为什么不到 num, 而直到根号下num?
数学逻辑:x^2 = x*x;x^2 = x1*x2;显然x1和x2不可能同时大于x,必有一个小于x。所以只要循环到x就能找出x^2的所有因子。 LeoChou 发表于 2016-4-18 10:56
数学逻辑:x^2 = x*x;x^2 = x1*x2;显然x1和x2不可能同时大于x,必有一个小于x。所以只要循环到x就能找出x^ ...
那你能保证,大的那个x2 就不是质数了。比如说 10=2*5,26=2*13; x1知道了还不知道x2吗?循环控制不是固定死的,完全看你循环里面怎么写。 LeoChou 发表于 2016-4-20 09:39
x1知道了还不知道x2吗?循环控制不是固定死的,完全看你循环里面怎么写。
不懂啊
页:
[1]