Мне нужно вывести из данного диапазона те числа, которые имеют только 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; }
Проблема в вашем коде заключается в неправильном условии во внутреннем цикле. Вместо 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 и самого числа).
Проблема в вашем коде заключается в неправильном условии во внутреннем цикле. Вместо 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 и самого числа).