Проблема с функцией заключается в том, что она не делит заданное число на простое число, пока число не делится на простое число.
Например, для числа, равного 4, деление происходит только один раз на 2, а затем I увеличивается, но число не равно 1. После деления оно равно 2.
Таким образом, функция имеет бесконечное значение l oop.
Функция может выглядеть аналогично функции, представленной в демонстрационной программе.
#include <iostream>
bool isSphenic ( unsigned int n )
{
const unsigned int DISTINCT_PRIMES = 3;
unsigned int count = 0;
unsigned int product = 1;
for ( unsigned int tmp = n, i = 2; count < DISTINCT_PRIMES && tmp != 1; i++ )
{
if ( tmp % i == 0 )
{
++count;
product *= i;
while ( tmp % i == 0 ) tmp /= i;
}
}
return count == DISTINCT_PRIMES && product == n;
}
int main()
{
const int N = 200;
for ( int i = 1; i < N; i++ )
{
if ( isSphenic( i ) ) std::cout << i << ' ';
}
std::cout << '\n';
return 0;
}
Вывод программы:
30 42 66 70 78 102 105 110 114 130 138 154 165 170 174 182 186 190 195
Обратите внимание, что нет необходимости вызывать функцию sPrime
как вы делаете.