它适用于小数字,但拒绝为正在检查的数字输出更多因素" 600851475143"。这是我的代码,请注意,我是c ++的新手
#include<iostream>
#include<cmath>
#include<vector>
using namespace std;
int main()
{
int value;
vector<int>v1;
cout << "Enter Value: ";
cin >> value;
for(int index=2 ; index<=(value/2); index++)
{
if (value% index==0)
{
v1.push_back(index);
}
}
cout<<"The Numbers are:";
for (vector<int>::iterator it = v1.begin(); it != v1.end(); ++it)
{
cout<<" "<< *it << endl;
}
return 0;
}
答案 0 :(得分:1)
这个数字,你试图找到解决方案是非常大的。所以你的这个程序有两个问题。
for(i=2 ;i<=(Value/2); i++)
可以通过检查sqrt
value
来改进
int
很小,适用于600851475143,请改用long long
。编辑 - 下面的剧透
这家伙正在解决同样的问题 - Java - Can't make ProjectEuler 3 Work for a very big number (600851475143)
答案 1 :(得分:0)
原因可能是int不能存储600851475143,因此会出现溢出,导致(可能)负数。您可以从攀爬中检查MAX_INT或使用最大限制。
如果你想用如此大的数字进行计算,你应该尝试使用BigInt类型。
另请注意:您似乎首先检查数字是否均匀,然后是否可以除以3等。优化可能是使用i + = 2并在检查数字是否为3之后从3开始甚至,而不是i ++,因为2 + = 2n始终是偶数。
答案 2 :(得分:0)