错误:primef未初始化?

时间:2015-07-19 01:32:59

标签: c++ prime-factoring

当我运行此代码时,我收到错误:变量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;
}

1 个答案:

答案 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

您应该已经注意到,您在代码中的两个不同位置拥有相同的最大素数因子报告。这是一个错误的线索。你应该删除哪一个?