/*Attention!versionNONFONCTIONNELLE!ŞNefonctionnequepourk<121*/ privatestaticbooleanprem(intk){ if(k<2){returnfalse;} if((k==2)||(k==3)||(k==5)||(k==7)){returntrue;} if((k%2!=0)&&(k%3!=0)&&(k%5!=0)&&(k%7!=0)){ returntrue; } returnfalse; }//prem /** *Listedesnombrespremiersàraisonde10parligne. * *Squelettegénéralduprogramme * *@authorPeterDAEHNEŞHEGGenève *@version1.0 */ publicclassPremSquelette{ /*RetournelavaleurtrueSIETSEULEMENTSIkestunnombrepremier*/ privatestaticbooleanprem(intk){ /*Applicationstrictedeladéfinition: kestpremiers'ilaexactementdeuxdiviseursdistincts.*/ privatestaticbooleanprem(intk){ intcpt=0; inti=1; while(i<=k){ if(k%i==0){cpt=cpt+1;} i=i+1; } returncpt==2; }//prem /*Algorithmetestantsikestunnombrepremier*/ }//prem privatestaticvoidlisterPremiers(intn){ System.out.print("Listedesnombrespremiersentre0et"+n); intk=0;intcpt=0; while(k<=n){ if(prem(k)){ if(cpt%10==0){System.out.println();} System.out.print(""+k);cpt=cpt+1; } k=k+1; } System.out.println();System.out.println("Ilyena"+cpt); }//listerPremiers /*Onarrêtelarecherchedesdiviseursàlaracinecarréedek. Lesnombres0et1sonttraitésàpart. Onretournelerésultatdèsqueconnu(undiviseuraététrouvé).*/ privatestaticbooleanprem(intk){ if(k<2){returnfalse;} intracine=(int)Math.sqrt(k); inti=2; while(i<=racine){ if(k%i==0){returnfalse;} i=i+1; } returntrue; }//prem publicstaticvoidmain(String[]args){ if(args.length<1){ System.out.println("Vousdevezfournirlalimitecommeparamètre."); }else{ listerPremiers(Integer.parseInt(args[0])); } }//main }//PremSquelette Temps de calcul des diverses versions Prem1 Prem2 Prem3 Prem4 - temps temps temps temps de de de de calcul calcul calcul calcul pour pour pour pour tester tester tester tester les les les les nombres nombres nombres nombres premiers premiers premiers premiers entre entre entre entre 0 0 0 0 et et et et 1000000: 256.559 [secondes] 10000000: 6.905 [secondes] 10000000: 3.485 [secondes] 10000000: 2.332 [secondes] Le cas de Prem1 doit être considéré à part et n’est pas comparable avec les autres. Pour les autres solutions, on observe que les résultats expérimentaux confirment ce qu’on attendait théoriquement : entre Prem2 et Prem3, on gagne un facteur d’environ 2 (on ne fait que la moitié du travail dans Prem3, puisqu’on ne teste pas les nombres pairs) ; entre Prem3 et Prem4, on diminue encore le temps d’environ un tiers (en ne traitant pas les multiples de 3, il y a environ un tiers de nombres en moins à tester). /*Onarrêtelarecherchedesdiviseursàlaracinecarréedek. Lesnombres0et1ainsique2etlespairssonttraitésàpart. Onretournelerésultatdèsqueconnu(undiviseuraététrouvé).*/ privatestaticbooleanprem(intk){ if(k==2){returntrue;} if((k<2)||(k%2==0)){returnfalse;} intracine=(int)Math.sqrt(k); inti=3; while(i<=racine){ if(k%i==0){returnfalse;} i=i+2; } returntrue; }//prem /*Onarrêtelarecherchedesdiviseursàlaracinecarréedek. Lesnombres0,1,2,3ainsiquelespairsetlesmultiplesde3sonttraitésàpart. Onretournelerésultatdèsqueconnu(undiviseuraététrouvé).*/ privatestaticbooleanprem(intk){ if((k==2)||(k==3)){returntrue;} if((k<2)||(k%2==0)||(k%3==0)){returnfalse;} intracine=(int)Math.sqrt(k); inti=5;intpas=2; while(i<=racine){ if(k%i==0){returnfalse;} i=i+pas;pas=6Şpas; } returntrue; }//prem