)|
#include <stdio.h> int main ( void) { int deux = 2; FILE * fichier; fichier = fopen ("c:/fichier.txt","w"); if (!fichier) { printf("pb!"); return 1; } fprintf(fichier,"%d\n",deux); fclose (fichier); return 0; } |
|
#include <stdio.h> #include <math.h> int main (void) { int fin_test = 10000000000; int i; int reste; int nb; int fin; int racine; FILE * fichier; fichier = fopen("c:/fichier.txt","a+"); if (!fichier) { printf("pb!\n"); return 1; } fseek(fichier,0,SEEK_END); fin = ftell(fichier); for (i=3;i<=fin_test;i++) { rewind(fichier); while(1) { fscanf(fichier,"%d\n",&nb); reste = i % nb; if( reste == 0 ) { break ; } if(((ftell(fichier))==fin)||(nb>((sqrt(i))+1))) { fseek(fichier,0,SEEK_END); fin = ftell(fichier); printf("%d\n",i); fprintf(fichier,"%d\n",i); break ; } } } fclose(fichier); return 0; } |
|
Une méthode pour stocker des nombres premiers consiste à écrire les nombres sous la forme 30k + i, avec i compris entre 0 et 29. Dans une telle écriture, seuls les nombres pour lesquels i vaut 1, 7, 11, 13, 17, 19, 23 ou 29 peuvent être premiers: en effet, pour toutes les autres valeurs de i,on peut factoriser l'expression 30k + i, par exemple 30k + 5 = 5 ( 6k + 1 ). Avec un octet de mémoire ( unité de huit <<bits>> valant 0 ou 1 ), au lieu de coder un seul nombre premier, on code pour ces huit valeurs de i, par un 1 ou un 0, la nature première ou non de huit nombres dans une tranche de 30: on obtient donc une compression d'un facteur 30. En utilisant 210 à la place de 30, on code une tranche de longueur 210 avec 6 octets ( facteur de compression 35). |
|
Les nombres premiers de la tranche [90, 120] sont codés par 01111110 (code qui signifie que 90+1 n'est pas premier, 90+7 l'est, ...) |
for k in Les Entiers for i in {1, 7, 11, 13, 17, 19, 23, 29} si (30k+i) est premier ecrire le couple (k,i) end end
-