|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#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++)[/b]
为什么要这样循环呢,而不是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;
}
从这方面缩短迭代的步长。 |
|