• Где ошибка в решении?

    @til_down Автор вопроса
    Wataru, огромное вам спасибо за ответы и ваше терпение! Вы мне очень помогли!
  • Где ошибка в решении?

    @til_down Автор вопроса
    Wataru, спасибо, понял)

    Не совсем понял, какой метод вы в итоге используете
    Я решил сделать следующим образом:
    for (long long i = 2; i * i < number; i++)
    	{
    		flag = true;
    		if (number % i == 0)
    		{
    			for (long long j = 2; j * j < i; j++)

    Меня смущает, то что, этот подход работает не со всеми числами. Для 600851475143 выводит правильно. А для 246, результат 3, хотя должен быть 41
  • Где ошибка в решении?

    @til_down Автор вопроса
    Wataru, большое спасибо! Решил использовать второй метод. Ответ вывел правильно.
    Я решил разобраться, почему данный способ работает, но не смог понять. Потому как, работает он не для всех чисел. К примеру, если в качестве вводимого числа использовать 246 - программа выводит 3, хотя должна вывести 41.Можете объяснить почему?

    И ещё, если есть возможность, можете написать(в виде кода) ваш способ решения -
    Однако, если вы будете сокращать number на i (number /= i;), пока оно делится (может, придется кучу раз сокращать), то не надо внутреннего цикла - i всегда будет простым.
    И объяснить как он работает?

    Заранее спасибо, вы мне очень помогли)
  • Где ошибка в решении?

    @til_down Автор вопроса
    Wataru,
    И вообще логика проверки на простоту у вас сломана. 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;
    }