#include #include "diviseurs.h" #define NMEM (256) static int memoire[NMEM][NMEM]; static int nmemoire = 0; int liste_diviseurs(int n, int resultats[]) { int i; int nresultats = 0; for (i = 0; i < nmemoire; i++) { if (memoire[i][0] == n) { int j; for (j =0; j < memoire[i][1]; j++) resultats[j] = memoire[i][j + 2]; return memoire[i][1]; } } for (i = 1; i <= n/2; i++) if (n % i == 0) resultats[nresultats++] = i; resultats[nresultats++] = n; if (nresultats < NMEM - 2) { int index = nmemoire++; memoire[index][0] = n; memoire[index][1] = nresultats; for (i = 0; i < nresultats; i++) memoire[index][i + 2] = resultats[i]; } return nresultats; } extern int est_premier(unsigned short n) { int resultats[USHRT_MAX]; return (liste_diviseurs(n, resultats) == 2); }