Моя попытка — Самый большой главный фактор — от Проекта Эйлера

Он работает для небольших чисел, но отказывается выводить больше факторов для рассматриваемого числа «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;
}

1

Решение

Число, для которого вы пытаетесь найти решение, достаточно велико. Так что у вашей программы есть 2 проблемы.

  1. for(i=2 ;i<=(Value/2); i++) можно улучшить, проверяя до sqrt из value
  2. А также int мал для 600851475143, используйте long long вместо.

РЕДАКТИРОВАТЬ — Спойлер ниже

Этот парень решает ту же проблему — Java — не удается заставить ProjectEuler 3 работать для очень большого числа (600851475143)

1

Другие решения

Возможно, причина в том, что 600851475143 не может быть сохранено с помощью int, поэтому вы получаете переполнение, приводящее к (возможно) отрицательному числу. Вы можете проверить MAX_INT из клима или используя max из лимитов.

Вам следует попробовать использовать тип BigInt, если вы хотите выполнять вычисления с такими большими числами.

Также обратите внимание: кажется, что вы начинаете с проверки, является ли число четным, а затем можно ли его разделить на 3 и т. Д. Оптимизация, вероятно, заключается в использовании i + = 2 и начинании с 3 после проверки, является ли число четным, а чем i ++, так как 2 + = 2n всегда четно.

0

  • использование без знака длинный длинный Тип данных, этого должно быть достаточно, если ваша арка поддерживает это.
  • Во-вторых, итерация от 2 до int (sqrt (Value)), предварительно вычислить это значение, конечно
  • добавлять v1.reserve (Значение / 4); чтобы избежать многих перераспределений векторов
  • Если вы хотите найти самый большой главный фактор — Перейдите от Value / 2 к 2 и просто найдите сначала
  • Избегайте проверки четных чисел, кроме 2
0