Не совсем понял, какой метод вы в итоге используетеЯ решил сделать следующим образом:
for (long long i = 2; i * i < number; i++)
{
flag = true;
if (number % i == 0)
{
for (long long j = 2; j * j < i; j++)
Однако, если вы будете сокращать number на i (number /= i;), пока оно делится (может, придется кучу раз сокращать), то не надо внутреннего цикла - i всегда будет простым.И объяснить как он работает?
И вообще логика проверки на простоту у вас сломана. del = i выполнится для любого j, такого что i на него не делится.. Спасибо за замечание. Исправил, проверил на числах поменьше. Работает, вроде, правильно. Но основная проблема сохранилась. Все еще ничего не выводит. Быть может с++ не может справиться с такими огромными значениями? И надо подойти к решению, используя алгоритмы для работы с большими числами?
#include <iostream>
using namespace std;
long long number = 600851475143; long long del = 0;
bool flag = true;
int main(int argc, char const *argv[])
{
for (long long i = 2; i < number; i++)
{
flag = true;
if (number % i == 0)
{
for (long long j = 2; j < i; j++)
{
if (i % j == 0)
{
flag = false;
break;
}
}
if (flag)
del = i;
}
}
cout << del << endl;
return 0;
}