Попытка Проекта Эйлера Три

Я хочу открыть, сказав, что я еще не очень хорош в программировании, и, вероятно, есть лучший способ сделать то, что я хочу. Если вы смотрите на вещи, которые так явно раздражают вас, то двигайтесь дальше.

Я дал толчок к третьему вопросу для Project Euler, который является «Найти самый большой главный фактор из 600851475143.» Сначала я сделал кое-что, что вычисляет факторы числа. (Извините за имена, я ничего не мог придумать.)

#include <iostream>

using namespace std;

void Factor (double dFactorer)
{
long dUpperlimit;
dUpperlimit = (int)dFactorer/2;
float fnumTouse;
fnumTouse = 1;
int nCounter;
nCounter = 0;
while (fnumTouse <= dUpperlimit)
{
if ((long)dFactorer % (long)fnumTouse == 0)
{
cout << fnumTouse << endl;
fnumTouse++;
nCounter++;
}
else
{
fnumTouse++;
}
}
cout << dFactorer << endl;
cout << "There are " << nCounter + 1 << " factors in this number";
}

int main()
{
double dNumtofac;
cout << "Enter a number to factor: ";
cin >> dNumtofac;
cout << endl;
Factor (dNumtofac);
return 0;
}

Хорошо, так что я знаю, что это действительно плохая работа, что со всем кастингом, который я должен был сделать, чтобы некоторые вещи работали. Он работает с меньшими числами, но что-то около 100 миллионов заставляет выводить только определенное количество факторов, прежде чем полностью остановиться. Я пробовал номер проблемы, и он выводил сам номер, говоря, что в этом 600851475143 есть только один фактор. Я хотел бы знать, почему он говорит это, это как-то связано с ограничениями переменных, которые я использовал ? Что-то другое? У меня недостаточно знаний, чтобы понять это.

0

Решение

#include <iostream>

using namespace std;

int main()
{
long long n=0;
//to do: verify that the number is positive and below the limit of long long
cout <<"The number to factor : ";
cin  >>n;
long long aux = n%2==0 ? 2 : 1;
for (long long i=3;i<=n/2;i+=2)
if(n%i==0)
aux = aux>n/i ? aux : n/i;
cout<<"Greatest factor = "<<aux;
return 0;
}

Конечно, вы можете значительно улучшить это, сделав переход от высокого к низкому уровню и остановившись при первом появлении фактора. Не забудьте проверить, является ли n / 2 нечетным или четным. (Не проверял код).

0

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector