Я хочу начать с того, что я еще не очень хорошо разбираюсь в программировании и, возможно, есть лучший способ делать то, что я хочу. Если вас раздражает взгляд на такие откровенно плохие вещи, продолжайте.
Я пытался ответить на третий вопрос 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 есть только один фактор. Я хотел бы знать, почему он говорит это, это как-то связано с ограничениями переменных, которые я использовал ? Что-то другое? У меня недостаточно знаний, чтобы разобраться в этом.