Tous les forums
Crible de Mathiascevitch.cxx
09/09/2023 à 06h31
Compilateur C pour android:
https://www.01net.com/telecharger/utilitaires/cxxdroid.html
Entre 2 siestes:
#include ’stdio.h’
#include ’stdlib.h’
#include ’math.h’
#include ’conio.h’ remplacer ici les ’ par les chevrons plus grand ou plus petit.
int main(int argc, char *argv[])
{
int a = 0;
int b =0;
int c =0;
int d =0;
int k =0;
int f =0;
int g =0;
int h =0;
int i =0;
int p = 0;
int NP=0 ;
printf(" Saisir jusqu’à quelle valeur vous voulez rechercher les nombres Impairs Non Premiers et Premiers : \n\n\n ");
scanf(" %d",&NP);
int Tableau[NP] ;
for (int x=0; x<= NP; x++)
{
Tableau[x] = 0;
}
int sauvegarde =0;
int val1 =0;
int val2 = 0;
int val3 = 0;
int val4 = 0;
int val5 = 0;
int val6 =0;
suite :
b = 0;
while (NP>= (6*a+ 7) * (6*a + 6*b + 7 ))
{
printf ("\n %d Vertical : %d Horizontal %d", (6*a+ 7) * (6*a + 6*b + 7 ),a,b);
val1 = (6*a + 7) * (6*a + 6*b + 7 );
Tableau[val1] = val1;
b++;
sauvegarde = b;
}
a++;
sauvegarde = sauvegarde -1;
if (sauvegarde >= 0)
{
goto suite ;
}
else
{
printf("\n\n\n");
goto suite2;
}
suite2:
d = 0;
while (NP>= (6*c + 7) * (6*c + 6*d + 11 ))
{
printf ("\n %d Vertical : %d Horizontal %d", (6*c + 7) * (6*c + 6*d + 11 ),c,d);
val2 = (6*c + 7) * (6*c + 6*d + 11 );
Tableau[val2] = val2;
d++;
sauvegarde = d;
}
c++;
sauvegarde = sauvegarde -1;
if (sauvegarde >= 0)
{
goto suite2;
}
else
{
printf("\n\n\n");
goto suite3;
}
suite3:
k=2;
while (NP>= 3*k )
{
printf ("\n %d Horizontal : %d", 3*k, k);
val3 = 3*k ;
Tableau[val3] = val3 ;
k++;
}
printf("\n\n\n");
k=2;
while (NP>= 5*k )
{
printf ("\n %d Horizontal : %d", 5*k,k);
val6 = 5*k ;
Tableau[val6] = val6 ;
k++;
}
printf("\n\n\n");
suite4:
g = 0;
while (NP>= (6*f + 11) * (6*f + 6*g + 11 ))
{
printf ("\n %d Vertical : %d Horizontal : %d", (6*f + 11) * (6*f + 6*g + 11 ),f,g);
val4 = (6*f + 11) * (6*f + 6*g + 11 );
Tableau[val4] = val4;
g++;
sauvegarde = g;
}
f++;
sauvegarde = sauvegarde -1;
if (sauvegarde >= 0)
{
goto suite4;
}
else
{
printf("\n\n\n");
goto suite5;
}
suite5:
i = 0;
while (NP>= (6*h + 11) * (6*h + 6*i + 13 ))
{
printf ("\n %d Vertical : %d Horizontal : %d", (6*h + 11) * (6*h + 6*i + 13 ),h,i);
val5 = (6*h + 11) * (6*h + 6*i + 13 );
Tableau[val5] = val5;
i++;
sauvegarde = i;
}
h++;
sauvegarde = sauvegarde -1;
if (sauvegarde >= 0)
{
goto suite5;
}
// Tableau[49] = 5;
printf("\n\n\n LISTE DES NOMBRES PREMIERS : \n");
int np_oupas;
int compteur = 0;
for (int z =3; z <= NP;z++ )
{
np_oupas = Tableau[z];
if (Tableau[z]== 0)
{
printf(" %d", z);
compteur ++;
}
z++;
}
printf ("\n\n On a trouvé %d nombres premiers entre 0 et %d", compteur, NP);
printf("\n\n\n");
}
09/09/2023 à 07h09
Je me documente. Apparemment, un programme d'etablissement polynomial pour une plage de nombres premiers qui devrait donner pas mal de nombres premiers dans une certaine plage , mais pas tous!!!!!!
Interessant certainement pour optimiser un rogramme brutal iteratif qui lui, donne tous les nombres premiers, mais a un prix machine exorbitant quand on depasse plusieurs milliards.
09/09/2023 à 07h25
Un programme force brute iteratif es t la. Vous entrez le premier nombre de votre intervzalle, puis le dernier nombre de cet intervalle. Ca va au debut assez vite avec un petit intervalle de recherche.
https://reduction-image.com/eugenol/premierJS/
Sans risque, c'est sur mon serveur.
09/09/2023 à 08h51
Made by grifix-gezu
Je suis sûr de mon coup.
Je vais voir si on peut réaliser un créneau de recherche comme chez toi.
Bye bye
La façon de sortir les np est correcte j’ai vérifié seul le compteur est faux.
Non le compteur est bon je suis OK et toi aussi d’ailleurs.
09/09/2023 à 09h42
Je vais essayer quand je le peux de traduire ton programme en javascript pour qu'on puisse le verifier sur le net directement.
J'ai corrigé mon programme car l'affichage etait tronqué . Le but sera de verifier par comparaison les nombres premiers par ton programme entre 500 et 6000.
https://reduction-image.com/eugenol/premierJS/
Mon programme est sans interet, bourrin , mais c'est celui utilisé classiquement. Le tien m'interesse.
EDIT c'est tellement bourrin et consommateur de ressources que france inter craque en mod frequence 99.quelquechose mghz a l'execution de mon programme . Sinon, aucun danger.
09/09/2023 à 13h58
Petite explication nécessaire :
En dehors des valeurs à tester qui sont des multiples de 5 ou 3 on peut procéder de cette façon pour les autres valeurs :
Si la concaténation de la valeur à tester donne 4 ou 1 ou 7 les tests de primalité se feront avec les 2 formules suivantes :
(6*i+ 7) * (6*i + 6*j + 7 )
(6*i + 11) * (6*i + 6*j + 11 )
Si une de ces 2 formules satisfait l’égalité le nombre est non premier
Sinon il est premier.
Si la concaténation des chiffres donne 8 ou 2 ou 5 les tests de primalité se feront avec les 2 formules suivantes :
(6*i + 7) * (6*i + 6*j + 11 )
(6*i + 11) * (6*i + 6*j + 13 )
Exemple : Test de 54637
La concaténation de 54637 est 5+4+6+3+7 = 7
D’où 2 solutions
(6*i+ 7) * (6*i + 6*j + 7 ) =? 54637
ou bien
(6*i + 11) * (6*i + 6*j + 11 ) =? 54637
On lance alors les 2 boucles de test suivantes :
int NP=54637;
int Tableau[NP]=0;
// On initialise ici tous les indices du tableau
// à la valeur 0. La dimension du tableau est de NP soit
// 54637
for (int x=0; x<= NP; x++)
{
Tableau[x] = 0;
}
suite:
int val = 0;
int j = 0;
while (NP>= (6*i+ 7) * (6*i+ 6*j + 7 ))
{
printf (" %d ", NP);
val = (6*i + 7) * (6*i + 6*j + 7 );
// on remplit notre tableau avec les nombres impairs
// non premiers trouvés car issus d’une multiplication.
// On remarque que l’indice du Tableau correspond
// exactement avec la valeur qui y est logee.
Tableau[val] = val;
j++;
sauvegarde = j;
}
i++;
// Exemple on aura Tableau[49]⁴⁹ pour un nombre
// non premier et pour un nombre premier on aura un
// truc de cette forme Tableau [0]³¹.
sauvegarde = sauvegarde -1;
if (sauvegarde >= 0)
{
goto suite ;
}
On reprend le programme precedent ensuite ici avec la formule
(6*i + 11) * (6*i + 6*j + 11 )
Puis on lit l’élément du Tableau[ ? ] ⁵⁴⁶³⁷ pour tirer sa valeur.
Si on lit 0 alors 54637 est premier
Si on lit 54637 alors 54637 est non premier ce qui est le cas ici.
Bye bye!
10/09/2023 à 04h33
Plus qu’une intuition :
Des 4 boucles précédentes on peut envisager cette intuition que j’ai déjà vérifié sur qq nombres.
A voir par programme ?!?!?!
Tous les nombres non premiers dont la concaténation de chaine donne 1 4 ou 7 doivent satisfaire à l’une des 2 formules :
(X - 49)÷6 ou bien (X - 121) ÷ 6 = un nombre entier
Pour ceux dont la concaténation de chaîne donne 2 5 ou 8 ils doivent satisfaire à l’une des 2 autres formules :
(X- 141) ÷6 ou bien (X - 77)÷6 = un nombre entier
Les nombres dont la concaténation de chaîne donne 3 6 ou 9 sont divisibles par 3
Pour ceux se terminant par 5 ou 0 j’en parle même pas.
Exemple : 56 747 059 est un nombre premier.
5+6+7+4+7+0+5+9= 43
4+3 =7
Test 56747059 -49 = 56747010 ÷ 6 = 9 457 835
mais 56747059 - 121 = 56 746 938 ÷ 6 = 9 457 823
C’est impossible qu’il apparaisse dans 2 boucles indépendantes.
Donc je pense que le Test n’est valable que si 1 seule condition est vérifiée et non les 2 en même temps.
10/09/2023 à 21h26
Programme modifié pour faire les tests sur les NP
#include
#include
#include
#include
#include
int main(int argc, char *argv[])
{
int a = 0;
int b =0;
int c =0;
int d =0;
int k =0;
int f =0;
int g =0;
int h =0;
int i =0;
int p = 0;
int NP=0 ;
printf(" Saisir jusqu’à quelle valeur vous voulez rechercher les nombres Impairs Non Premiers et Premiers : \n\n\n ");
scanf(" %d",&NP);
time_t begin = time(NULL);
int Tableau[NP] ;
for (int x=0; x<= NP; x++)
{
Tableau[x] = 0;
}
int sauvegarde =0;
int val1 =0;
int val2 = 0;
int val3 = 0;
int val4 = 0;
int val5 = 0;
int val6 =0;
suite :
b = 0;
while (NP>= (6*a+ 7) * (6*a + 6*b + 7 ))
{
printf ("\n %d Vertical : %d Horizontal %d", (6*a+ 7) * (6*a + 6*b + 7 ),a,b);
val1 = (6*a + 7) * (6*a + 6*b + 7 );
Tableau[val1] = val1;
b++;
sauvegarde = b;
}
a++;
sauvegarde = sauvegarde -1;
if (sauvegarde >= 0)
{
goto suite ;
}
else
{
printf("\n\n\n");
goto suite2;
}
suite2:
d = 0;
while (NP>= (6*c + 7) * (6*c + 6*d + 11 ))
{
printf ("\n %d Vertical : %d Horizontal %d", (6*c + 7) * (6*c + 6*d + 11 ),c,d);
val2 = (6*c + 7) * (6*c + 6*d + 11 );
Tableau[val2] = val2;
d++;
sauvegarde = d;
}
c++;
sauvegarde = sauvegarde -1;
if (sauvegarde >= 0)
{
goto suite2;
}
else
{
printf("\n\n\n");
goto suite3;
}
suite3:
k=2;
while (NP>= 3*k )
{
printf ("\n %d Horizontal : %d", 3*k, k);
val3 = 3*k ;
Tableau[val3] = val3 ;
k++;
}
printf("\n\n\n");
k=2;
while (NP>= 5*k )
{
printf ("\n %d Horizontal : %d", 5*k,k);
val6 = 5*k ;
Tableau[val6] = val6 ;
k++;
}
printf("\n\n\n");
suite4:
g = 0;
while (NP>= (6*f + 11) * (6*f + 6*g + 11 ))
{
printf ("\n %d Vertical : %d Horizontal : %d", (6*f + 11) * (6*f + 6*g + 11 ),f,g);
val4 = (6*f + 11) * (6*f + 6*g + 11 );
Tableau[val4] = val4;
g++;
sauvegarde = g;
}
f++;
sauvegarde = sauvegarde -1;
if (sauvegarde >= 0)
{
goto suite4;
}
else
{
printf("\n\n\n");
goto suite5;
}
suite5:
i = 0;
while (NP>= (6*h + 11) * (6*h + 6*i + 13 ))
{
printf ("\n %d Vertical : %d Horizontal : %d", (6*h + 11) * (6*h + 6*i + 13 ),h,i);
val5 = (6*h + 11) * (6*h + 6*i + 13 );
Tableau[val5] = val5;
i++;
sauvegarde = i;
}
h++;
sauvegarde = sauvegarde -1;
if (sauvegarde >= 0)
{
goto suite5;
}
printf("\n\n\n LISTE DES NOMBRES PREMIERS : \n");
int sauv = 0;
int np_oupas;
int compteur = 0;
for (int z =3; z <= NP;z=z+2 )
{
np_oupas = Tableau[z];
if (Tableau[z]== 0)
{
printf("\n %d compteur %d", z,compteur);
compteur ++;
sauv = compteur;
}
}
// printf(" \n affiche sauv %d", compteur);
// scanf("%d",&compteur);
int TableauNp[sauv];
for(int i= 1, z=3; i <= sauv, z<= NP; i++,z=z+2)
{
if (Tableau[z] == 0)
{
TableauNp[i] = z;
printf("\n TableauNp[] = %d ", TableauNp[i]);
}
}
// LECTURE DU TABLEAU DE NOMBRES PREMIERS ET TESTS POUR VOIR // SI LE RESULTAT DE LA DIVISION PAR 6 DONNE UN NOMBRE A // VIRGULE ....AUTRE DIT SI LE MODULO 6 EST DIFFERENT DE 0.
int test;
int test1;
int test2;
int nombre;
int nbnonconforme =0;
// int sauvnombre;
for (int i = 1; i<= sauv; i++)
{
test = TableauNp[i];
// printf("\n Entrez le nombre premier à tester : ");
// scanf("%d",&test);
if (test%9 ==1 or test%9 == 4 or test%9 == 7)
{
test1 = test - 49;
test1 = test1 % 6;
test2 = test - 121;
test2 = test2 %6;
if ( test1== 0 or test2==0 )
{
nbnonconforme++;
printf("\n Resultat %d non conforme à l’hypothese attendue pour le nombre premier modulo1.4.7 %d test1 %d test2 %d",nbnonconforme, test,test1,test2);
}
}
if (test%9 ==2 or test%9 == 5 or test%9 == 8)
{
test1 = test - 143;
test1 = test1 % 6;
test2 = test - 77;
test2 = test2 %6;
if ( test1== 0 or test2==0 )
{
nbnonconforme++;
printf(" \n Resultat %d non conforme à l’hypothese attendue pour le nombre premier modulo2.5.8 %d test1 %d test2 %d",nbnonconforme,test,test1,test2);
}
}
}
printf ("\n\n On a trouvé %d nombres premiers entre 0 et %d", compteur, NP);
time_t end = time(NULL);
printf("\n\n Le temps ecoulé pour une recherche sur %d nombres est de %d seconds", NP,(end - begin));
printf("TableauNp indice 105 valeur attendue %d", TableauNp[0]);
printf("\n\n\n");
}
11/09/2023 à 13h36
Je n'arrive pas a compiler ton programme avec les compilateurs c classiques. Trop d'erreurs. Je vais utiliser ton compilateur, mais faire de la programmation sur le telephone android en environnement cxxdroid, c'est pas tres top.....
Prends mon programme , fais le de 0 à 10000, prends le tien, et regarde si une distorsion apparait. Une seule distorsion, et tu peux jeter ton algo (helas) , ou l'adapter pour accelerer les programme classiques itératifs. Tu mets alors des compteurs de temps et tu regardes le benefice de développement s'il y a .
11/09/2023 à 16h16
adhoc écrivait:
-----
> Je n'arrive pas a compiler ton programme avec les compilateurs c classiques.
> Trop d'erreurs. Je vais utiliser ton compilateur, mais faire de la programmation
> sur le telephone android en environnement cxxdroid, c'est pas tres top.....
> Prends mon programme , fais le de 0 à 10000, prends le tien, et regarde si une
> distorsion apparait. Une seule distorsion, et tu peux jeter ton algo (helas) ,
> ou l'adapter pour accelerer les programme classiques itératifs. Tu mets alors
> des compteurs de temps et tu regardes le benefice de développement s'il y a .
Je suis en train de le récrire en très peu de ligne mais je viens de tout perdre sur la tablette il y 5 minutes. Il est trop long.
Déjà que je re-découvre le c.
J’ai vérifié l’hypothese avec un programme qui teste les premiers et non premiers. Je me suis un peu trop avancé :))))
Je vois ça après le repas.
De toute façon il faut faire tourner des boucles imbriquées.
Dans 1/4 d’h je te donne les 6 algorithmes nécessaires.
Bye bye.
11/09/2023 à 17h44
Vraiment, grand, evite de programmer sous android (tablette ou smartphone) , ce n'est vraiment pas l'ideal, sauf pour executer et controler tes programmes. La preuve :-)
Sinon, oui, si tu modifies ton programme juste pour tester si un nombre est P ou non, c'est tres bien et ca sera plus facile pour moi :-)
Tu as été clair dans tes explications, mais ca reste complexe et j'aime bien toucher un programme du bout du doigt, l'integration est alors plus facile. Donc je veux absolument faire tourner ton programme en C.
11/09/2023 à 17h59
adhoc écrivait:
-----
> Vraiment, grand, evite de programmer sous android (tablette ou smartphone) , ce
> n'est vraiment pas l'ideal, sauf pour executer et controler tes programmes. La
> preuve :-)
> Sinon, oui, si tu modifies ton programme juste pour tester si un nombre est P
> ou non, c'est tres bien et ca sera plus facile pour moi :-)
Voui mais en Vacances en dehors de chez moi je n’ai que ma tablette.
Puis ça me fait éviter beau papa qui est vrt chiant, en restant dans ma chambre.
Mais ça tu pouvais pas être prophète pour le deviner :))))
11/09/2023 à 17h59
Tu initialises 6 variables : avec 2 compteurs i et j
et 2 Tableaux de 1 rang initialisé pour le premier
à la valeur maximum par ordre croissant que tu veux connaitre et que tu prendras en lecture des l’entrée du programme.
Int np = 0 np variable entière np de saisie clavier
Scanf("%d",&np);
Tableau_de_multiples[np] initialisé à la dimension np
Exemple si tu veux t’arrêter au multiple qui a pour valeur 1500 ( ne pas confondre avec un nombre maximum de multiples recherchés) tu écris.
Tableau_de_multiples[1500]= 1500
Tu initialises ici ton tableau de np dimension par une boucle incrementee de 1 à la valeur 0.
Les 6 variables :
1__
la première "a" te sers à chercher les multiples de 3
a =2 initialisation à 2
a = 3*i avec i = i+1 comme boucle
2__
La deuxième "b"te sers à chercher les multiples de 5
b = 2 initialisation à 2
b = 5*i
3__
La troisième "c" te sers à chercher tous les multiples de 7 en première passe
c = (6*i + 7)*(6*i + 7 + 6*j)
4__
La quatrième "d" te sers à chercher tous les multiples de 7 en deuxième passe
d = c + 24*i + 28
5__
La cinquième "e" te sers à chercher tous les multiples de 11 en première passe
e = (6*i + 11)*(6*i +11+ 6*j)
6__
La sixième "f" te sers à chercher tous les multiples
de 11 en deuxième passe
f = e + 12*i + 22
Tu utilises ton Tableau_de_multiples et tu stockes tes multiples dans ton tableau.
L ’astuce c’est de stocker la variable d’une valeur donnée à l’indice de même valeur.
Tableau_de_multiples[a] = a
Tableau_de _multiples[b] = b
etc
Ainsi tous les multiples ayant une valeur que ton programme aura stocké auront leur case portant la même adresse.
On voit l’intérêt d’avoir initialisé à 0 toutes les adresses. Seules les adresses zéros n’auront pas été réinitialisé par les boucles de recherche et les adresses auront exactement la valeur des nombres premiers recherchés.
On lira donc le tableau Tableau_de_multiples par incrément de 2 à partir de 1 pour ne lire que les adresses impaires et chaque fois que l’on tombera sur 0 l’adresse lue correspondra à un nombre premier.
Donc on recherche les 6 variables à b c d e f dans une double boucle imbriquée en démarrant i puis une lecture de j
for(int i =0 ;....; i=i+1)
{
for( j =0;....;j=j +1)
{
Programme d’initialisation des
6 variables et stockage dans
Tableau_ de_multiples[a]=a
[b]=b etc etc
}
} initialisation à la valeur suivante de i et
retour dans la boucle j
Lecture du tableau pour recherche des nombres premiers et stockage dans un autre tableau.
Amuses toi bien en javascript tu pourras comparer la vitesse avec la même bécane et le même langage.
Bye bye
11/09/2023 à 18h05
Je vais essayer de voir si je peux faire ce programme cette nuit et qui sait en Jscript peut être :))))
11/09/2023 à 18h14
Prends ton temps, si c'est en C; c'est pas grave, en javascript, ca serait encore mieux; evidemment;c'est un langage interprété multiplateforme tres valable. Fais ce que tu peux, c'est deja pas mal du tout, ton travail :-)
Et il faut dormir, souviens toi ce que j'ai dit, le travaikl sur les NP peut rendre un humain totalement cinglé, ne te laisse pas submerger par ce Monstre. jJ'ai vraiment envie que tu depasses novembre 23 par des rapports simples avec les éléments, meme les pires que tu as connus.
11/09/2023 à 20h47
adhoc écrivait:
-----
> Vraiment, grand, evite de programmer sous android (tablette ou smartphone) , ce
> n'est vraiment pas l'ideal, sauf pour executer et controler tes programmes. La
> preuve :-)
> Sinon, oui, si tu modifies ton programme juste pour tester si un nombre est P
> ou non, c'est tres bien et ca sera plus facile pour moi :-)
Voui mais en Vacances en dehors de chez moi je n’ai que ma tablette.
Puis ça me fait éviter beau papa qui est vrt chiant en restant dans ma chambre.
Mais ça tu pouvais pas être prophète pour le deviner :))))
12/09/2023 à 07h54
Je suis arrivé a compiler ton programme de base (le premier que tu as publié). Assez rapide, mais pas mis de compteur. J'ai fait entre 0 et 5000. Il trouve 668 NP. Je dois faire cette somme de NP avec mon programme pour comparer. Je rappelle que mon programme est sans interet , bourrin car recursif, reprenant la racine carrée des diviseurs des nombres precedents a tester. Ce qui devient vite assez effroyable. Il n'a donc aucun interet, sans aucune subtilité mathematique, devient tres lent a tres tres lent jusqu'a l'arret selon la puissance du processeur MAIS on est SUR a 100% d'avoir TOUS les NP. Le but: comparer les deux programmes le le plus scientifiquement possible :-)
12/09/2023 à 10h00
J’ai cherché jusqu’à 100 millions tous les nombres premiers et ça m'a pris 18 min et 54 s
1 million en 8 secondes
12/09/2023 à 10h04
Ben voilà !!!:))))
J’ai cherché jusqu’à 100 millions tous les nombres premiers et ça m'a pris 18 min et 54 s
1 million en 8 secondes
Pour l’instruction d’horloge regarde les photos.
12/09/2023 à 10h11
J’ai modifié le programme car les tableaux statiques étaient insuffisant et j’avais un débordement de pile.
J’ai fait une allocation dynamique de tableau.
#include
#include
#include
#include
#include
#include
#include
int main(int argc, char *argv[])
{
int a = 0;
int b =0;
int c =0;
int d =0;
int k =0;
int f =0;
int g =0;
int h =0;
int i =0;
// int p = 0;
int NP=0;
printf(" Saisir une valeur maximum pour votre nb multiple : %d", NP);
scanf("%d", & NP);
time_t debut = time(NULL);
int *Tableau = new int[NP];
for (int i=0; i<= NP; i++)
{
Tableau[i] = 0;
}
int sauvegarde =0;
int val1 =0;
int val2 = 0;
int val3 = 0;
int val4 = 0;
int val5 = 0;
int val6 =0;
suite :
b = 0;
while (NP>= (6*a+ 7) * (6*a + 6*b + 7 ))
{
printf (" %d", (6*a+ 7) * (6*a + 6*b + 7 ));
val1 = (6*a + 7) * (6*a + 6*b + 7 );
Tableau[val1] = val1;
b++;
sauvegarde = b;
}
a++;
sauvegarde = sauvegarde -1;
if (sauvegarde >= 0)
{
goto suite ;
}
else
{
printf("\n\n\n");
goto suite2;
}
suite2:
d = 0;
while (NP>= (6*c + 7) * (6*c + 6*d + 11 ))
// do
{
printf (" %d", (6*c + 7) * (6*c + 6*d + 11 ));
val2 = (6*c + 7) * (6*c + 6*d + 11 );
Tableau[val2] = val2;
d++;
sauvegarde = d;
}//while (NP>= (6*c + 7) * (6*c + 6*d + 11 ));
c++;
sauvegarde = sauvegarde -1;
if (sauvegarde >= 0)
{
goto suite2;
}
else
{
printf("\n\n\n");
goto suite3;
}
suite3:
k=2;
while (NP>= 3*k )
{
printf (" %d", 3*k);
val3 = 3*k ;
Tableau[val3] = val3 ;
k++;
}
printf("\n\n\n");
k=2;
while (NP>= 5*k )
{
printf (" %d", 5*k);
val6 = 5*k ;
Tableau[val6] = val6 ;
k++;
}
printf("\n\n\n");
suite4:
g = 0;
while (NP>= (6*f + 11) * (6*f + 6*g + 11 ))
{
printf (" %d", (6*f + 11) * (6*f + 6*g + 11 ));
val4 = (6*f + 11) * (6*f + 6*g + 11 );
Tableau[val4] = val4;
g++;
sauvegarde = g;
}
f++;
sauvegarde = sauvegarde -1;
if (sauvegarde >= 0)
{
goto suite4;
}
else
{
printf("\n\n\n");
goto suite5;
}
suite5:
i = 0;
while (NP>= (6*h + 11) * (6*h + 6*i + 13 ))
{
printf (" %d", (6*h + 11) * (6*h + 6*i + 13 ));
val5 = (6*h + 11) * (6*h + 6*i + 13 );
Tableau[val5] = val5;
i++;
sauvegarde = i;
}
h++;
sauvegarde = sauvegarde -1;
if (sauvegarde >= 0)
{
goto suite5;
}
printf("\n\n\n LISTE DES NOMBRES PREMIERS : \n");
int np_oupas;
for (int z =3; z <= NP;z++ )
{
np_oupas = Tableau[z];
if (Tableau[z]== 0)
{
printf("\n %d est un nombre premier .", z);
}
z++;
}
time_t fin = time(NULL);
printf("\n\n Le temps ecoulé pour une recherche sur %d nombres est de %d seconds", NP,(fin - debut));
int x;
printf ("\n Recherche de Primalite\n ");
scanf("%d", &x);
if (Tableau[x]==0)
{
printf(" \n Yesssss!");
}
else
{
printf("\n Nooooooo!");
}
printf("\n\n\n");
}
12/09/2023 à 13h39
ca a l'air extremement prometteur. Et rapide, tres rapide. Pour un controle efficace, deux choses:
-remettre tes fichiers include sans chevrons mais avec ', comme au debut. ils ne sont pas visibles.
-Ecris l'index de chaque nombre premier. Le controle sera ainsi beaucoup plus facile. Exemplen 1#1, 2#2, 3#3, 4#5 tc....Je dois le faire aussi.
Bravo encore. merci.
12/09/2023 à 14h18
adhoc écrivait:
-----
> ca a l'air extremement prometteur. Et rapide, tres rapide. Pour un controle
> efficace, deux choses:
> -remettre tes fichiers include sans chevrons mais avec ', comme au debut. ils ne
> sont pas visibles.
> -Ecris l'index de chaque nombre premier. Le controle sera ainsi beaucoup plus
> facile. Exemplen 1#1, 2#2, 3#3, 4#5 tc....Je dois le faire aussi.
> Bravo encore. merci.
Merci
Je vais voir tout ça. Moi même j’ai tellement de programmes en cours que je cherche le fichier include pour New l’allocation dynamique de mémoire.
Il me faudra encore du temps.......je rame:))))
Je suis conscient de la disparition des chevrons avec l’éditeur html d’eugenol depuis le début où j’utilisais les ' mais j’ai tellement à faire car je dois créer une salle de bain supplémentaire aussi pour avoir tout clean à la maison .......le plus vite possible++++
12/09/2023 à 15h38
J’ai rectifié le programme car une boucle ne tournait pas!!!!
Je t’envoi 2 photos qui donnent sur internet le même chiffre que moi du nombre de NP inférieur à 10 millions.
Il y a une différence de 1 chiffre car j’avais pas compté le chiffre 2
:)))))))))
Il met donc un peu plus de temps à chercher.
Bye
#include ’stdio.h’
#include ’stdlib.h’
#include 'math.h’
#include ’conio.h’
#include ’time.h’
#include 'new’
int main(int argc, char *argv[])
{
int a = 0;
int b =0;
int c =0;
int d =0;
int k =0;
int f =0;
int g =0;
int h =0;
int i =0;
int p = 0;
int NP=0 ;
printf(" Saisir jusqu’à quelle valeur vous voulez rechercher les nombres Impairs Non Premiers et Premiers : \n\n\n ");
scanf(" %d",&NP);
time_t begin = time(NULL);
// int Tableau[NP] ;
int *Tableau = new int[NP];
for (int x=0; x<= NP; x++)
{
Tableau[x] = 0;
}
int sauvegarde =0;
int val1 =0;
int val2 = 0;
int val3 = 0;
int val4 = 0;
int val5 = 0;
int val6 =0;
suite :
b = 0;
while (NP>= (6*a+ 7) * (6*a + 6*b + 7 ))
{
printf ("\n %d Vertical : %d Horizontal %d", (6*a+ 7) * (6*a + 6*b + 7 ),a,b);
val1 = (6*a + 7) * (6*a + 6*b + 7 );
Tableau[val1] = val1;
b++;
sauvegarde = b;
}
a++;
sauvegarde = sauvegarde -1;
if (sauvegarde >= 0)
{
goto suite ;
}
else
{
printf("\n\n\n");
goto suite2;
}
suite2:
d = 0;
while (NP>= (6*c + 7) * (6*c + 6*d + 11 ))
{
printf ("\n %d Vertical : %d Horizontal %d", (6*c + 7) * (6*c + 6*d + 11 ),c,d);
val2 = (6*c + 7) * (6*c + 6*d + 11 );
Tableau[val2] = val2;
d++;
sauvegarde = d;
}
c++;
sauvegarde = sauvegarde -1;
if (sauvegarde >= 0)
{
goto suite2;
}
else
{
printf("\n\n\n");
goto suite3;
}
suite3:
k=2;
while (NP>= 3*k )
{
printf ("\n %d Horizontal : %d", 3*k, k);
val3 = 3*k ;
Tableau[val3] = val3 ;
k++;
}
printf("\n\n\n");
k=2;
while (NP>= 5*k )
{
printf ("\n %d Horizontal : %d", 5*k,k);
val6 = 5*k ;
Tableau[val6] = val6 ;
k++;
}
printf("\n\n\n");
suite4:
g = 0;
while (NP>= (6*f + 11) * (6*f + 6*g + 11 ))
{
printf ("\n %d Vertical : %d Horizontal : %d", (6*f + 11) * (6*f + 6*g + 11 ),f,g);
val4 = (6*f + 11) * (6*f + 6*g + 11 );
Tableau[val4] = val4;
g++;
sauvegarde = g;
}
f++;
sauvegarde = sauvegarde -1;
if (sauvegarde >= 0)
{
goto suite4;
}
else
{
printf("\n\n\n");
goto suite5;
}
suite5:
i = 0;
while (NP>= (6*h + 11) * (6*h + 6*i + 13 ))
{
printf ("\n %d Vertical : %d Horizontal : %d", (6*h + 11) * (6*h + 6*i + 13 ),h,i);
val5 = (6*h + 11) * (6*h + 6*i + 13 );
Tableau[val5] = val5;
i++;
sauvegarde = i;
}
h++;
sauvegarde = sauvegarde -1;
if (sauvegarde >= 0)
{
goto suite5;
}
printf("\n\n\n LISTE DES NOMBRES PREMIERS : \n");
int sauv = 0;
int np_oupas;
int compteur = 0;
for (int z =3; z <= NP;z=z+2 )
{
np_oupas = Tableau[z];
if (Tableau[z]== 0)
{
printf("\n %d compteur %d", z,compteur);
compteur ++;
sauv = compteur;
}
}
// printf(" \n affiche sauv %d", compteur);
// scanf("%d",&compteur);
int *TableauNp = new int[sauv];
for(int z=3; z<= NP; z=z+2)
{
if (Tableau[z] == 0)
{
i = i + 1;
TableauNp[i] = z;
printf("\n TableauNp[ %d ] = %d ", i,TableauNp[i]);
}
}
printf ("\n\n On a trouvé %d nombres premiers entre 0 et %d", compteur, NP);
time_t end = time(NULL);
printf("\n\n Le temps ecoulé pour une recherche sur %d nombres est de %d seconds", NP,(end - begin));
printf("\n\n\n");
}