Error: primef not initialized?

Error: primef not initialized?

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

如果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.

您应该已经注意到,您在代码中的两个不同位置都有相同的最大质因数报告。这是出现问题的线索。你应该删除哪一个?