Он работает для небольших чисел, но отказывается выводить больше факторов для рассматриваемого числа «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;
}
Число, для которого вы пытаетесь найти решение, достаточно велико. Так что у вашей программы есть 2 проблемы.
for(i=2 ;i<=(Value/2); i++)
можно улучшить, проверяя до sqrt
из value
int
мал для 600851475143, используйте long long
вместо.РЕДАКТИРОВАТЬ — Спойлер ниже
Этот парень решает ту же проблему — Java — не удается заставить ProjectEuler 3 работать для очень большого числа (600851475143)
Возможно, причина в том, что 600851475143 не может быть сохранено с помощью int, поэтому вы получаете переполнение, приводящее к (возможно) отрицательному числу. Вы можете проверить MAX_INT из клима или используя max из лимитов.
Вам следует попробовать использовать тип BigInt, если вы хотите выполнять вычисления с такими большими числами.
Также обратите внимание: кажется, что вы начинаете с проверки, является ли число четным, а затем можно ли его разделить на 3 и т. Д. Оптимизация, вероятно, заключается в использовании i + = 2 и начинании с 3 после проверки, является ли число четным, а чем i ++, так как 2 + = 2n всегда четно.