
La fonction suivante (optimisée pour la rapidité) permet de retourner
1 si le paramètre N est un nombre premier,0 sinon :unsigned char isPrime(unsigned int N)
{
if(N < 2) return 0;
if(N == 2) return 1;
if(N % 2 == 0) return 0;
for(int i=3; (i*i)<=N; i+=2)
if(N % i == 0 ) return 0;
return 1;
}
Le code ci-dessous permet d'afficher tous les nombres premiers entre 0 et 100 :
// Online C compiler to run C program online
#include <stdio.h>
// Fonction qui retourne 1 si N est premier
unsigned char isPrime(unsigned int N)
{
// 0 et 1 ne sont pas premiers
if(N < 2) return 0;
// 2 est premier
if(N == 2) return 1;
// Tous les nombres divisible par 2 sont premiers
if(N % 2 == 0) return 0;
// On parcourt tous les diviseurs impairs entre 3 et racine de N
for(int i=3; (i*i)<=N; i+=2)
// Si i est un diviseur de N, ce n'est pas un nombre premier
if(N % i == 0 ) return 0;
// S'il n'y a pas de diviseur, c'est un nombre premier
return 1;
}
int main() {
unsigned int i
// Boucle qui affiche tous les nombres premiers entre 0 et 100
for (i=0; i<=100; i++)
if (isPrime(i)) printf("%d ", i);
return 0;
}
Le code ci-dessus implémente une fonction en C pour tester si un nombre est premier. La fonction retourne 1 si le nombre est premier et 0 sinon.
unsigned char isPrime(unsigned int N)Prototype de la fonction :
unsigned char isPrime(unsigned int N)
unsigned char est utilisé pour retourner un octet (valeur 0 ou 1), où 0 indique que le nombre n'est pas premier, et 1 indique qu'il est premier.N est un entier non signé (unsigned int) représentant le nombre à tester.Cas des nombres inférieurs à 2 :
if(N < 2) return 0;
N est inférieur à 2, la fonction retourne immédiatement 0, car ces nombres (0 et 1) ne sont pas premiers.Cas du nombre 2 :
if(N == 2) return 1;
N est égal à 2, la fonction retourne immédiatement 1, car 2 est un nombre premier.Test de divisibilité par 2 :
if(N % 2 == 0) return 0;
N est pair et différent de 2 (ce qui est vérifié précédemment), il n'est pas premier. Ainsi, si N est divisible par 2, la fonction retourne 0.Boucle pour tester les autres diviseurs impairs :
for(int i=3; (i*i)<=N; i+=2)
if(N % i == 0) return 0;
i = 3 (le plus petit nombre impair après 1) et teste les diviseurs impairs.i*i <= N, c'est-à-dire tant que i est inférieur ou égal à la racine carrée de N. Cela permet de réduire le nombre de tests. Si N a un diviseur d plus grand que sa racine carrée, alors il aura nécessairement un autre diviseur plus petit.i est augmentée de 2 à chaque itération (i += 2), ce qui garantit que seuls les diviseurs impairs sont testés (puisque les nombres pairs ont déjà été éliminés).N est divisible par un i quelconque (c'est-à-dire si N % i == 0), la fonction retourne immédiatement 0, car cela signifie que N n'est pas premier.Retour de la fonction :
return 1;
N est premier, et la fonction retourne 1.N, uniquement sur les nombres impairs. Si aucun diviseur n'est trouvé, le nombre est premier.