В этом цикле
for(loop_counter ; loop_counter < number ; loop_counter++){
используется необъявленная переменная loop_counter
. Если это глобальная переменная, то она не должна использоваться в функции, потому что, по крайней мере, неясно, каково ее значение.
Также внутри цикла вы прерываете его итерации, как только number%loop_counter != 0
. Но это не означает, что число простое.
И если пользователь передаст отрицательное число или ноль, то функция будет иметь неопределенное поведение.
Функция может быть определена следующим образом
int is_prime( unsigned int n )
{
int prime = n % 2 == 0 ? n == 2 : n != 1;
for ( unsigned int i = 3; prime && i <= n / i; i += 2 )
{
prime = n % i != 0;
}
return prime;
}
Функция сначала исключает все четные числа, кроме 2
, поскольку четные числа не являются простыми числами. И это также исключает число 1
, потому что число 1
не является простым по определению.
int prime = n % 2 == 0 ? n == 2 : n != 1;
Так что в цикле нет смысла рассматривать делители, которые являются четными.
for ( unsigned int i = 3; prime && i <= n / i; i += 2 )
^^^^^^
Затем в цикле проверяется, делится ли данное нечетное число n
на нечетный делитель
prime = n % i != 0;
Если n % i
равно 0, тогда переменная премьер получаетзначение 0 и цикл останавливает свои итерации из-за условия в цикле.
for ( unsigned int i = 3; prime && i <= n / i; i += 2 )
^^^^^
, которое можно переписать также как
for ( unsigned int i = 3; prime != 0 && i <= n / i; i += 2 )
^^^^^^^^^^