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
.
您应该已经注意到,您在代码中的两个不同位置都有相同的最大质因数报告。这是出现问题的线索。你应该删除哪一个?
当我 运行 此代码时出现错误:变量 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
.
您应该已经注意到,您在代码中的两个不同位置都有相同的最大质因数报告。这是出现问题的线索。你应该删除哪一个?