Closed. This question needs debugging details。它当前不接受答案。
想改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。
在6个月前关闭。
Improve this question
我已经编写了一个代码,以查找迄今为止最大的素因数,该最大的素因数已经针对我测试过的每种情况起作用,但是当我输入600851475143时失败了。它一直给我5102831,这是不正确的。我不确定为什么会发生这种情况,即使我已经检查了它,也将不胜感激。
这应该输出:
想改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。
在6个月前关闭。
Improve this question
我已经编写了一个代码,以查找迄今为止最大的素因数,该最大的素因数已经针对我测试过的每种情况起作用,但是当我输入600851475143时失败了。它一直给我5102831,这是不正确的。我不确定为什么会发生这种情况,即使我已经检查了它,也将不胜感激。
#include <iostream>
long int get_largest_prime_factor(long int);
int main()
{
std::cout << get_largest_prime_factor(600851475143);
return 0;
}
long int get_largest_prime_factor(long int prime_Number)
{
for(long int r = prime_Number - 1; r != 1; r--)
{
if(prime_Number % r == 0)
{
long int a = get_largest_prime_factor(r);
long int b = get_largest_prime_factor(prime_Number / r);
if(a == b)
return a;
return a > b? a : b;
}
}
return prime_Number;
}
最佳答案
使用此简单算法即可获取正确的素数:
long long int getMaxPrimeFactor(long long int n) {
int i, max = -1;
while (n % 2 == 0) {
max = 2;
n /= 2;
}
for (i = 3; i <= sqrt(n); i = i + 2)
while (n % i == 0) {
max = i;
n /= i;
}
max = (n > 2) ? n : max;
return max;
}
这应该输出:
6857
09-19 19:43