#include #include #include #include #include #include "premiers.h" /* Calcul les nombres premiers inférieurs ou égaux à n par le crible d'Eratosthène. */ int premiers_inferieurs(int n, int ** ppremiers) { /* Pour simplifier le code, on réserve t[0] et t[1] pour rien */ bool t[n + 1]; // Attention, spécifique à C99 int npremiers = 0; int premiers[n - 1]; for (int i = 0; i <= n; i++) { t[i] = true; } for (int i = 2; i <= n; i++) { if (t[i]) { /* i est premier et on doit éliminer ses multiples. */ premiers[npremiers ++] = i; for (int j = i; j * i <= n; j++) { t[j * i] = false; } } } if (ppremiers != NULL) { *ppremiers = (int *) malloc(npremiers * sizeof(int)); assert(*ppremiers); memcpy(*ppremiers, premiers, npremiers * sizeof(int)); } return npremiers; }