当我运行此代码时,我收到错误:变量primef未初始化,但我认为是(除非我不能正确理解c ++) 另外,我的代码在处理能力方面的效率如何? 这是代码:
/*
This program finds the largest prime factor of the number 600851475143
Written by Jay Schauer
*/
//Data Declarations
#include <iostream>
int main()
{
using namespace std;
int number = 600851475143; //stores the number
int primef; //stores the largest prime number
for (int i = 2; i < number; i++)
{
cout << "Number: " << number << endl;
cout << "i: " << i << endl;
if (number % i == 0)
{
number /= i;
primef = i;
}
cout << "Largest prime factor: " << primef << endl;
}
cout << "Largest prime factor: " << primef << endl;
system("pause");
return 0;
}
答案 0 :(得分:0)
如果number
为偶数,则primef
在第一次循环时初始化为2。但是,如果number
是奇数,primef
在第一次循环时没有初始化,因为if
失败,所以当你尝试在循环的最后一个语句中写它时从未被初始化。
您的算法效率不高。这是一个更好的伪代码;它找到所有因素及其多重性,而不仅仅是最大的因素:
function factors(n)
f := 2
while f * f <= n
while n % f == 0
output f
n := n / f
f := f + 1
if n > 1 then output n
这仍然不是特别有效,但比你的更好。一旦你开始工作,效率的下一步就是分别消除2的因子,然后试验除以奇数f
。
您应该已经注意到,您在代码中的两个不同位置拥有相同的最大素数因子报告。这是一个错误的线索。你应该删除哪一个?