Мне нужно вывести из данного диапазона те числа, которые имеют только 3 делителя (кроме 1 и самого числа) С++ Код отказывается работать, выводит что-то не то
#include <iostream>
#include <string>
#include <fstream>
#include <cmath>
using namespace std;

int main()
{
int b = 0, i = 0, m = 0;
for (i = 123456789; i <= 163047361;i++)
{
b = 0;
for (m = 2;m < sqrt(i); m++)
{
if (i%m==0)
b++;
if (b > 3)
break;
}
if (b == 3)
cout << i << endl;
}
return 0;
}

2 Ноя 2022 в 19:42
150 +1
0
Ответы
1

Проблема в вашем коде заключается в неправильном условии во внутреннем цикле. Вместо m < sqrt(i) нужно использовать m <= sqrt(i) чтобы учитывать случай, когда делитель равен корню из числа.

Исправленный код будет выглядеть следующим образом:

#include <iostream>
#include <string>
#include <fstream>
#include <cmath>
using namespace std;
int main()
{
int b = 0, i = 0, m = 0;
for (i = 123456789; i <= 163047361; i++)
{
b = 0;
for (m = 2; m <= sqrt(i); m++)
{
if (i % m == 0)
b++;
if (b > 3)
break;
}
if (b == 3)
cout << i << endl;
}
return 0;
}

Теперь код должен правильно выводить числа из заданного диапазона, у которых есть только 3 делителя (кроме 1 и самого числа).

16 Апр 2024 в 17:17
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир