Функция primeornot
возвращается сразу после первого теста.Вы не проверяете каждый делитель до a / 2
так, как вы намереваетесь.
Обратите также внимание, что проверка каждого числа до a / 2
расточительна, вы можете остановиться, когда i * i > a
.
Здесьявляется исправленной версией:
int primeornot(int a) {
int i;
for (i = 2; i * i <= a; i++) {
if (a % i == 0) {
return 0;
}
}
return 1;
}
Вы можете дополнительно улучшить функцию, протестировав 2 раза и только затем нечетные числа:
int primeornot(int a) {
int i;
if (a != 2 && a % 2 == 0)
return 0;
for (i = 3; i * i <= a; i += 2) {
if (a % i == 0) {
return 0;
}
}
return 1;
}
Наконец, прототип для main
без аргументовint main(void)
и вы должны вывести новую строку после сообщений и вернуть 0
:
int main(void) {
int number_given_by_user;
printf("Enter a positive integer to find whether it is prime or not: ");
scanf("%d", &number_given_by_user);
if (primeornot(number_given_by_user)) {
printf("The given number is a prime number\n");
} else {
printf("The given number is not a prime number\n");
}
return 0;
}