Ваш код не работает, потому что после строк ниже i
становится 3 вместо 2.
i = 2;
root = c_sqrt(x);
while (i++ <= root)
Если вы измените местоположение увеличения i
, как показано ниже, isPrime(4)
будет в порядке
i = 2;
root = c_sqrt(x);
while (i <= root)
{
if (x % i++ == 0)
return (0);
}
Но у функции c_sqrt(int nb)
также есть некоторая проблема со входом, подобным 8
, поэтому вам также нужно это исправить.
/*
if ((nb % i) == 0)
return (i);
return (0);
*/
return i;
Как и выше, нижняя часть вашего код на самом деле не нужен, достаточно просто вернуть i
.