|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#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;
}//这个代码得出答案是87625999,然而这个数不属于质数,它是由71,839,1471相乘而来.
//题目是求600851475143 的最大质数因子(本人萌新,大佬勿喷)
确实,这个代码的答案是错误的。这里提供一个修改后的正确的代码:
#include <stdio.h>
#include <math.h>
int main() {
long long num = 600851475143;
long long maxPrimeFactor = 0;
long long i;
// 对2进行特殊处理
while (num % 2 == 0) {
maxPrimeFactor = 2;
num /= 2;
}
// 处理其他奇数因子
for (i = 3; i <= sqrt(num); i += 2) {
while (num % i == 0) {
maxPrimeFactor = i;
num /= i;
}
}
// 如果num大于2,说明num是一个大于sqrt(num)的质数
if (num > 2) {
maxPrimeFactor = num;
}
printf("%lld\n", maxPrimeFactor);
return 0;
}
这个代码会得到正确的答案:6857。这是因为600851475143的质数因子是71、839、1471和6857,而最大的质数因子是6857。
|
-
|