Cookie Consent byPrivacyPolicies.comUne formule qui pue le soufređŸ‘čđŸ‘čđŸ‘čđŸ‘čđŸ‘č - Eugenol

Une formule qui pue le soufređŸ‘čđŸ‘čđŸ‘čđŸ‘čđŸ‘č

Grifix-Gezucri

28/03/2024 Ă  03h23

#include stdio.h
#include stdlib.h

int main()
{
int val;
printf ( "\n Insérez la valeur sup de vos nombres : " ) ;
scanf("%d", &val);
bool * Tab = new bool [val];
int X=3,compteur=1;
while ( compteur>0)
{
for (int n =0 ; X*(X+2*n)< val ; n++)
{
Tab[X*(X+2*n)]=1;
compteur = n ;
}
X=X+2; compteur --;
}

int aff=0;
for (int i =3; i < val; i = i+2)
{
if (Tab[i]==0 )
{
printf("\t %d", i);
if ((aff++)%10==0)
printf("\n");
}
}
}

Y2lbwn6p1ycu8ffhtai4ifgap4ry - Eugenol

Avatar transparent iqadnc - Eugenol
adhoc

28/03/2024 Ă  09h19

C'est pas de l'Or , mais de la dynamite. Fais gaffe quand meme. Tu as poursuivui avec la formule des impairs non premiers. Fortiche.


Grifix-Gezucri

28/03/2024 Ă  09h45

adhoc Ă©crivait:
-----
> C'est pas de l'Or , mais de la dynamite. Fais gaffe quand meme. Tu as poursuivui
> avec la formule des impairs non premiers. Fortiche.

C’est toujours un plaisir de t’avoir au bout du fil adhocđŸ€ŁđŸ€ŁđŸ€ŁđŸ€ŁđŸ€Ł

Xk0b2el99xgyj1ddl7d8yj8oa6tw - Eugenol

Grifix-Gezucri

29/03/2024 Ă  03h29

C’est sympa d’avoir une formule qui donne tous les impairs non premiers Ă  dĂ©faut de celle qui donne tous les impairs premiers non?
Maintenant que j’ai le Yin il ne me reste plus qu’à chercher le YangđŸ€ŁđŸ€ŁđŸ€ŁđŸ€Ł

Uosksor3zf15inrv87ius8c4z8y0 - Eugenol

Seguemol

02/05/2024 Ă  00h47

X(X + 2n)
On a ici une table de multiplication universelle des nombres impairs basée sur les carrés des nombres impairs par ordre croissant.


Grifix-Gezucri

23/09/2024 Ă  05h52

Pour x nb entier defini sur [1, +∞[ et y nb entier dĂ©fini sur [0, +∞[ la formule suivante donne TOUS les X impairs non premiers
X = (2x + 1 + y)ÂČ - yÂČ
Chaque multiple peut donc ĂȘtre dĂ©fini par un couple (x,y)
On trouve tjs dans ce cas un couple avec x=0 et y≠0 et au moins un x≠0 et y dĂ©fini sur l’intervalle [0, +∞[
Dans le cas d’un nb premier on a UN seul couple du type (0, y≠0) .
(1,0) (2,0) (3,0) (4,0)...... <=> 9 25 49 81 121.....
(1,1) (2,1) (3,1) (4,1)...... <=> 15 35 63 99 143....
(1,2) (2,2) (3,2) (4,2)...... <=> 21 45 77 117 165 .....
(1,3) (2,3) (3,3) (4,3)...... <=> 27 55 91 135.....
(1,4) (2,4) (3,4) (4,4)...... <=> 33 65 105 153.....

Dans le cas des multiples impairs on a au moins 2 couples:

(1,0)=(0,4) = 9 ; (2,0)=(0,12)=25 ; (3,0)=(0,24) =49 ; (4,0)=(0,40) = 81 ; (5,0)=(0,60)= 121
(1,1)=(0,7) = 15 ; (2,1)=(0,17) =35 ; (3,1)=(0,31) =63 ; (4,1)=(0,49)=99 ; (5,1)=(0,71)=143
(1,2)=(0,10) = 21 ; (2,2)=(0,22)=45
(1,3)=(0,13) = 27 ; (2,3)=(0,27)=55
(1,4)=(0,16) = 33 ; (2,4)=(0,32)=65
(1,5)=(0,19)= 39 ;

Pour trouver les valeurs des couples X= (0, ?) , en remplaçant par x=0 on obtient :
X= (2×0 +1 +y)ÂČ - yÂČ
X= (y+1)ÂČ - yÂČ
X= 2y + 1
y = (X-1) / 2

Rigolo!!!!


Grifix-Gezucri

16/10/2024 Ă  13h00

J’ai perdu un peu mon temps......enfin presqueđŸ€ŁđŸ€ŁđŸ€Ł!!!
J’ai optimisĂ© la recherche sur 800 millions en la rĂ©alisant en 3 fois moins de temps soit 24 secondes au lieu de 76 secondes.
Puis j’ai optimisĂ© la mĂ©moire en la stockant non plus sur un octet mais sur 1 bit mĂ©moire, et j’ai pu calculer ainsi les NP sur un espace de 2 Milliards en 96 secondes.

3no3kb5ah777eb8qke9nc2u4ytdn - Eugenol
Ah9kho8g6pkl1kx3ktaw3fe0im19 - Eugenol
7tsjzmwfhyjmja5f8woboanvlpxx - Eugenol
7bh9soo6zql41g9pdc4n43ustjdr - Eugenol

Grifix-Gezucri

16/10/2024 Ă  13h02

#include stdio.h
#include stdlib.h
#include time.h
#include new

int main()
{
long int compteur = 1, x = 1, a =3 , val, comptage = 1;
int choix;
printf("Programme Grifix de recherche des NP non optimisé"
" \nRechercher tous les nbres premiers en dessous de val = ");
scanf("%ld", &val);
time_t debut = time(NULL);
bool *Tableau = new bool[val];
while (compteur > 0)
{
int n = 0 ;
long int b =a*a ;
while ( b + n*2*a < val)
{
Tableau[ b + n*2*a ] = 1;
compteur = n++;
}
x++;
a = 2*x +1;
compteur--;
}

time_t fin = time(NULL);
printf("\nRecherche terminée en %d secondes ", fin - debut);
for (int i = 3; i < val; i = i + 2)
{
if (Tableau[i] == 0)
{
comptage++;
}
}
printf(" \n Il y a % ld NP entre 1 et %ld", comptage, val);
printf("\n\nChoix 1 = Sortir ou Choix 2 = Afficher liste : ");
scanf("%d", &choix);
if (choix == 1)
{
exit(EXIT_SUCCESS);
}
else
printf("2");
for (int i = 3; i < val; i = i + 2)
{
if (Tableau[i] == 0)
{
printf(" %d", i);
}
}
}


Grifix-Gezucri

16/10/2024 Ă  13h10

#include stdio.h
#include stdlib.h
#include time.h

int main()
{
int val;
printf ( "\n (Programme Grifix programme de recherche des Nombres Premiers optimisĂ©) \n Insérez la valeur sup de vos nombres : " ) ;
scanf("%d", &val);
bool * Tab = new bool [val];
int X= 3 ;
int compteur=1,boucle = 1;
int nombre_de_premiers=0;
time_t debut = time(NULL);
printf(" boucle : %d ", 1);
while ( compteur>0)
{
for (int n =0 ; X*(X+2*n)< val ; n++)
{
if (Tab[X]==0)
{
Tab[X*(X+2*n)]=1;
compteur = n ;
printf(" \n X=%d compteur = %d multiple %d ",X, compteur, X*(X +2*n));
}
else
{
printf ( "\n Saut de boucle else pour X=%d", X) ;
goto suite;
}
}
 

suite: X=X+2;
compteur --;
boucle++;
printf(" \n boucle : %d", boucle) ;
}
time_t fin = time(NULL);
printf ("\nTemps de recherche : %d secondes \n ", fin- debut);
for (int i =3; i < val; i = i+2)
{ if (Tab[i]==0 )
{
nombre_de_premiers ++;
// printf (" %d", i);
}
}
printf(" On a trouvé %d nombres premiers", nombre_de_premiers);
}

POUR TESTER LA RAPIDITÉ DU PROG ON SUPPRIME LES FONCTIONS D’AFFICHAGE

#include stdio.h
#include stdlib.h
#include time.h

int main()
{
int val;
printf ( "\n (Programme Grifix programme de recherche des Nombres Premiers optimisĂ© sans affichage ) \n Insérez la valeur sup de vos nombres : " ) ;
scanf("%d", &val);
bool * Tab = new bool [val];
int X= 3 ;
int compteur=1;
int nombre_de_premiers=0;
time_t debut = time(NULL);
while ( compteur>0)
{
for (int n =0 ; X*(X+2*n)< val ; n++)
{
if (Tab[X]==0)
{
Tab[X*(X+2*n)]=1;
compteur = n ;
}
else
{
goto suite;
}
}
 

suite: X=X+2;
compteur --;

}
time_t fin = time(NULL);
printf ("\nTemps de recherche : %d secondes \n ", fin- debut);
for (int i =3; i < val; i = i+2)
{ if (Tab[i]==0 )
{
nombre_de_premiers ++;
}
}
printf(" On a trouvé %d nombres premiers", nombre_de_premiers);
}


Grifix-Gezucri

16/10/2024 Ă  13h20

Programme incluant une gestion memoire sur des bits pour atteindre 2 Milliards.

#include stdio.h
#include stdlib.h
#include time.h

int main()
{
int val;
printf ( "\n (Programme Grifix programme de recherche des nombres premiers optimisĂ© avec amelioration gestion memoire sur des bits) \n Insérez la valeur sup de vos nombres : " ) ;
scanf("%d", &val);
unsigned char *Tab = (unsigned char *)malloc((val + 7) / 8); // On alloue le nombre de bits nécessaires
if (Tab == NULL)
{
printf("Erreur d'allocation de mémoire\n");
}
int X= 3 ;
int compteur=1;
int nombre_de_premiers=0;
time_t debut = time(NULL);
while ( compteur>0)
{
for (int n =0 ; X*(X+2*n)< val ; n++)
{
if (!(Tab[X / 8] & (1 << (X % 8))))
{
Tab[X*(X +2*n) / 8] |=(1 << (X*(X +2*n) % 8));
compteur = n ;
}
else
{
// printf("\n saut pour X= %d", X);
goto suite;
}
}
 

suite: X=X+2; compteur --;
}
time_t fin = time(NULL);
printf ("\nTemps de recherche : %d secondes \n ", fin- debut);
for (int i =3; i < val; i = i+2)
{ if ((Tab[i / 8] & (1 << (i % 8))) ==0)
{
nombre_de_premiers ++;
// printf (" %d", i);
}
}
printf(" On a trouvé %d nombres premiers", nombre_de_premiers);
free(Tab); // Libération de la mémoire allouée
}

Ce code C est un programme optimisé pour trouver les nombres premiers jusqu'à une valeur donnée. Voici une explication du code :

Inclusions de fichiers d'en-tĂȘte :
#include : Permet l'utilisation de fonctions d'entrée/sortie standard comme printf et scanf.
#include : Fournit des fonctions pour l'allocation de mémoire dynamique comme malloc et free.
#include : Permet de mesurer le temps d'exécution du programme.
Fonction main :
Le point d'entrée du programme.
Entrée de l'utilisateur :
Demande à l'utilisateur de saisir la valeur supérieure de la plage de nombres à tester.
Stocke la valeur saisie dans la variable val.
Allocation de mémoire :
Alloue un bloc de mémoire dynamique pour un tableau de caractÚres non signés (unsigned char *Tab).
La taille du tableau est calculée comme le nombre de bits nécessaires pour représenter tous les nombres jusqu'à val.
Si l'allocation échoue, un message d'erreur est affiché et le programme se termine.
Initialisation des variables :
X : Initialise le premier nombre impair Ă  tester (3).
compteur : Initialise un compteur pour la boucle principale.
nombre_de_premiers : Initialise un compteur pour le nombre de nombres premiers trouvés.
Mesure du temps de début :
Enregistre le temps actuel Ă  l'aide de la fonction time(NULL) et le stocke dans la variable debut.
Boucle principale :
ItÚre jusqu'à ce que compteur devienne inférieur ou égal à 0.
Boucle interne :
ItÚre sur les multiples de X jusqu'à ce qu'ils dépassent val.
Vérification de la primalité :
Si le bit correspondant au nombre actuel dans le tableau Tab n'est pas défini (c'est-à-dire que le nombre n'est pas marqué comme non premier), il est marqué comme non premier en définissant le bit correspondant dans Tab.
compteur est mis à jour avec la valeur de n pour la prochaine itération.
Si le bit correspondant est déjà défini, cela signifie que le nombre est déjà marqué comme non premier, et la boucle interne est interrompue en utilisant goto suite.
Incrémentation de X :
X est incrémenté de 2 pour passer au prochain nombre impair.
compteur est décrémenté.
Mesure du temps de fin :
Enregistre le temps actuel Ă  l'aide de la fonction time(NULL) et le stocke dans la variable fin.
Affichage du temps d'exécution :
Affiche la différence entre fin et debut en secondes.
Comptage des nombres premiers :
Parcourt tous les nombres impairs de 3 Ă  val.
Si le bit correspondant dans Tab n'est pas défini, cela signifie que le nombre est premier, et nombre_de_premiers est incrémenté.
Affichage du nombre de nombres premiers trouvés :
Affiche le nombre total de nombres premiers trouvés.
Libération de mémoire :
LibÚre le bloc de mémoire alloué à Tab à l'aide de la fonction free(Tab).
Explication de l'optimisation de la gestion de la mémoire :

Le code utilise un tableau de bits (Tab) pour représenter tous les nombres jusqu'à val. Chaque bit dans le tableau correspond à un nombre, et un bit défini indique que le nombre correspondant est non premier.
Cette approche est plus efficace en termes de mémoire que de stocker tous les nombres dans un tableau.
La taille du tableau Tab est calculée comme le nombre de bits nécessaires pour représenter tous les nombres jusqu'à val, ce qui permet d'optimiser l'utilisation de la mémoire.
Explication du code optimisé :

Le code utilise le crible d'Ératosthùne pour identifier les nombres premiers.
La boucle principale itĂšre sur les nombres impairs Ă  partir de 3.
Pour chaque nombre impair X, la boucle interne itÚre sur ses multiples jusqu'à ce qu'ils dépassent val.
Si un multiple de X n'est pas encore marqué comme non premier, il est marqué comme non premier en définissant le bit correspondant dans Tab.
La boucle interne est interrompue si un multiple de X est déjà marqué comme non premier, car tous les multiples suivants de X seront également non premiers.
Cela permet d'optimiser le processus en évitant de vérifier les multiples de nombres déjà marqués comme non premiers.
En rĂ©sumĂ©, ce code C est une implĂ©mentation efficace du crible d'ÉratosthĂšne pour trouver les nombres premiers jusqu'Ă  une valeur donnĂ©e, en utilisant une gestion optimisĂ©e de la mĂ©moire pour un meilleur rendement.


Grifix-Gezucri

16/10/2024 Ă  13h37

Code en Java script pour l’ami adhoc grñce à l’IA.

function findPrimes(val) {
// Alloue le nombre de bits nécessaires
const tab = new Uint8Array(Math.ceil((val + 7) / 8));
let x = 3;
let compteur = 1;
let nombreDePremiers = 0;
const debut = Date.now();

while (compteur > 0) {
for (let n = 0; x * (x + 2 * n) < val; n++) {
if (!(tab[x / 8] & (1 << (x % 8)))) {
tab[x * (x + 2 * n) / 8] |= (1 << (x * (x + 2 * n) % 8));
compteur = n;
} else {
// Saut pour X = x
continue;
}
}
x += 2;
compteur--;
}

const fin = Date.now();
console.log(`Temps de recherche : ${fin - debut} millisecondes`);

for (let i = 3; i < val; i += 2) {
if (!(tab[i / 8] & (1 << (i % 8)))) {
nombreDePremiers++;
// console.log(` ${i}`);
}
}

console.log(`On a trouvé ${nombreDePremiers} nombres premiers`);
}

const val = 1000;
findPrimes(val);
Explications :

Allocation de mémoire : En JavaScript, on utilise un Uint8Array pour représenter le tableau de bits.
OpĂ©rations sur les bits : Les opĂ©rations de dĂ©calage de bits (<< et >>) et de masque de bits (& et |) sont les mĂȘmes en JavaScript qu'en C.
Gestion du temps : On utilise Date.now() pour mesurer le temps de recherche en millisecondes.
Affichage des résultats : On utilise console.log() pour afficher les résultats dans la console.
Points importants :

Le code JavaScript utilise les mĂȘmes algorithmes que le code C.
La gestion de la mémoire est automatique en JavaScript, il n'est donc pas nécessaire d'utiliser free().
Le code JavaScript est plus concis que le code C.
Remarques :

Le code C utilise goto pour sauter à une étiquette, ce qui n'est pas recommandé en JavaScript.
Le code JavaScript utilise des commentaires pour expliquer les différences avec le code C.


Avatar transparent iqadnc - Eugenol
adhoc

16/10/2024 Ă  13h57

Tu as fait un tableau de bits pour marquer les nombres premiers et non-premiers. Tres fort.
Tu as essayé le code en JS ou tu veux que je mette sur mon serveur pour essai?


Avatar transparent iqadnc - Eugenol
adhoc

16/10/2024 Ă  14h13

J'ai mis ton programme JS, en production
https://reduction-image.com/eugenol/Premiers_allocation_memoireJS.html
Impressionnant, le crible d'erasthotene modifié. Et impressionnant aussi que ca soit un dentiste qui arrive a ces resultats. Bravo.


Grifix-Gezucri

16/10/2024 Ă  14h35

Non, ce qui est impressionnant c’est qu’en JS tu mettes 2 fois moins de temps jusqu'à 2Milliards !!!!!
Voir saisie d’écran
Je suis epatatassé.
Bye mon grand pote,👋👋

4pyn5zrx1htf77kik0140e4iuqzu - Eugenol

Avatar transparent iqadnc - Eugenol
adhoc

16/10/2024 Ă  15h03

C'est TON programme que l'IA a adapté. Seul, sans rien lui dire de specifique, il aurait pondu une merdouille.
2500000000
Rechercher
Temps de recherche : 75893 millisecondes
On a trouvé 121443370 nombres premiers
1minute et demie pour les deux et demi premiers milliards de nombres. pitine..... Je suis scotché. Mon ordi ,dans mon cab est tres moyen, il a 8 ans..... Je ne te dis pas avec un ordi meuh meuh de maintenant.


Grifix-Gezucri

16/10/2024 Ă  15h17

adhoc Ă©crivait:
-----
> C'est TON programme que l'IA a adapté. Seul, sans rien lui dire de specifique,
> il aurait pondu une merdouille.
> 2500000000
> Rechercher
> Temps de recherche : 75893 millisecondes
> On a trouvé 121443370 nombres premiers
> 1minute et demie pour les deux et demi premiers milliards de nombres.
> pitine..... Je suis scotché. Mon ordi ,dans mon cab est tres moyen, il a 8
> ans..... Je ne te dis pas avec un ordi meuh meuh de maintenant.

Il n’y a rien eu de spĂ©cial seulement une petite idĂ©e nĂ©e de l’observation il y a 3 jours vers 4 h du mat.
Ah si !! Le traitement de la mémoire ralenti de bien 30% le travail...dommage.
Bonne fin de journée!


Grifix-Gezucri

18/10/2024 Ă  05h21

Quand une idée en amÚne une autre.....
L’observation que j’ai faite pour optimiser vient du fait que toutes les boucles multiplicatives partent des carrĂ©s sur les impairs successifs soient 3ÂČ 5ÂČ 7ÂČ 9ÂČ 11ÂČ 13ÂČ 15ÂČ etc etc
Il est Ă©vident qu’il ne sert Ă  rien de partir sur des boucles de multiples dĂ©jĂ  identifiĂ©s comme 9 15 21 25 27 etc etc car la dĂ©composition en facteur premier de ces multiples ramĂšne toujours Ă  un multiple dĂ©jĂ  identifiĂ© en amont.
Ici 2 Exemples:
9ÂČ = 3×3×3×3 ou bien 3×27 = 81 qui a Ă©tĂ© identifiĂ© dans la premiĂšre boucle de 3ÂČ
15ÂČ= 3×5×3×5 = 225 qui a Ă©tĂ© identifiĂ© 2 fois dans la boucle sur 3ÂČ => 3×75=225 et dans la boucle sur z5ÂČ => 5×45= 225.
Donc supprimer les carrĂ©s sur des multiples dĂ©jĂ  identifiĂ©s m’a permis d’aller 3 fois plus vite!!
Mais si on est attentif à ces 2 exemples on voit de suite que l’on aimerait supprimer d’autres doublons !!!!
Ici il est Ă©vident que 225 se retrouve 2 fois ..... une fois dans la boucle sur 3ÂČ et une autre dans la boucle sur 5ÂČ.
J’ai programmĂ© cette suppression pour Ă©viter TOUS les doublons calculĂ©s mais ces tests avant de pouvoir eviter la multiplication inutile sont consommateurs en ressource et font perdre plus de temps que la multiplication proprement dite!!!
Les premiers résultats sont décevants.
On arrive Ă  un paradoxe qui est le suivant: on doit absolument calculer les multiples d’un multiple pour qu’il ne soit pas identifiĂ© comme un nombre premier et en mĂȘme temps on cherche Ă  Ă©viter son calcul pour gagner du temps!!!!
Pour rĂ©sumer la situation on aimerait que la dĂ©finition d’un boolĂ©en en C Ă©volue un peu pour aboutir Ă  une optimisation maximum.
On sait dĂ©jĂ  qu’incrĂ©menter un boolĂ©en avec n’importe quelle valeur entiĂšre positive comme dans ces Ă©critures ci dessous donne toujours une valeur vraie
Bool Vraifaux = 567 ou Vraifaux = 3 ou Vraifaux = 1 donne toujours une valeur booléenne à vrai ou équivalente à Vraifaux == 1
Bool Vraifaux = 0 donnera toujours une valeur booléenne à faux ou équivalente à Vraifaux == 0 .
L’ avantage de la variable boolĂ©enne c’est qu’elle consomme peu de mĂ©moire et pourtant on aimerait pour sortir de l’impasse qu’elle donne une valeur vrai tout en gardant les valeurs entieres telles que 567 ou 3 rentrĂ©es prĂ©cĂ©demment pour Ă©viter des tests consommateurs de ressources.
On est dans l’APORIE TOTALEđŸ€ŁđŸ€ŁđŸ€ŁđŸ€Ł
Vitesse ou consommation mémoire, voilà le deal!


Grifix-Gezucri

18/10/2024 Ă  07h50

Essayes ce code JS adhoc je pense qu’il sera meilleur!
function main() {
const val = parseInt(prompt("Entrez la valeur supérieure de vos nombres : "));

// Allocation de mémoire pour le tableau de bits
const bitArray = new Array((val + 7) / 8).fill(0);

// Marquer les multiples de 2 et 3
for (let i = 4; i <= val; i += 2) {
bitArray[i / 8] |= 1 << (i % 8);
}
for (let i = 6; i <= val; i += 3) {
bitArray[i / 8] |= 1 << (i % 8);
}

// Marquer les multiples des nombres premiers restants
for (let i = 5; i * i <= val; i += 6) {
if (!(bitArray[i / 8] & (1 << (i % 8)))) {
for (let j = i * i; j <= val; j += i) {
bitArray[j / 8] |= 1 << (j % 8);
}
for (let j = i + 2; j * j <= val; j += i) {
if (!(bitArray[j / 8] & (1 << (j % 8)))) {
for (let k = j * j; k <= val; k += j) {
bitArray[k / 8] |= 1 << (k % 8);
}
}
}
}
}

// Compter les nombres premiers
let nombreDePremiers = 1; // On compte '2' comme premier
for (let i = 3; i < val; i += 2) {
if (!(bitArray[i / 8] & (1 << (i % 8)))) {
nombreDePremiers++;
}
}

// Calculer le temps de recherche
const startTime = new Date().getTime();
const endTime = new Date().getTime();
const searchTime = (endTime - startTime) / 1000;

console.log(`\nTemps de recherche : ${searchTime} secondes`);
console.log(`On a trouvé ${nombreDePremiers} nombres premiers`);
}

main();


Avatar transparent iqadnc - Eugenol
adhoc

18/10/2024 Ă  08h15

Des que je peux, on passe ton programme en production !!!


Avatar transparent iqadnc - Eugenol
adhoc

18/10/2024 Ă  09h11

J'ai peur que ca soit un peu plus lent (pas de beaucoup)
https://reduction-image.com/eugenol/Premiers_allocation_memoireJS2.html

Le precedent etait le meme url, sauf le 2

https://reduction-image.com/eugenol/Premiers_allocation_memoireJS.html

Element rassurant: on retrouve le meme nombre de NP pour les deux versions.


Grifix-Gezucri

18/10/2024 Ă  09h28

Exact Pourtant je gagne 10 s en C sur 2 Milliards
Cette AI c’est une grosse feignasse !!!
Bonne journée je te dérange plus, merci bcp!
Sinon en C bcp plus simple:

#include stdio.h
#include stdlib.h
#include time.h

int main() {
int val;
printf("\n(Programme Grifix - recherche des nombres premiers optimisé)\nInsérez la valeur sup de vos nombres : ");
scanf("%d", &val);

// Allocation de mémoire pour le tableau de bits
unsigned char *Tab = (unsigned char *)calloc((val + 7) / 8, sizeof(unsigned char));
if (Tab == NULL) {
printf("Erreur d'allocation de mémoire\n");
return 1;
}

int X = 3;
int nombre_de_premiers = 1; // On compte '2' comme premier
time_t debut = time(NULL);

// Parcours des nombres impairs pour marquer les non-premiers
for (X = 3; X * X <= val; X += 2) {
// Si X est un nombre premier (non marqué)
if (!(Tab[X / 8] & (1 << (X % 8)))) // ICI LA CLÉ DE L’OPTIMISATION
{
// Marquer les multiples impairs de X Ă  partir de X*X
for (int n = X * X; n < val; n += 2 * X)
{
Tab[n / 8] |= (1 << (n % 8));
}
}
}

// Calcul du nombre de premiers
for (int i = 3; i < val; i += 2) {
if ((Tab[i / 8] & (1 << (i % 8))) == 0) {
nombre_de_premiers++;
}
}

time_t fin = time(NULL);
printf("\nTemps de recherche : %ld secondes\n", fin - debut);
printf("On a trouvé %d nombres premiers\n", nombre_de_premiers);

free(Tab); // Libération de la mémoire allouée
return 0;
}


Avatar transparent iqadnc - Eugenol
adhoc

18/10/2024 Ă  13h42

Ce qui est etonnant , c'est que le deuxieme propgramme en JS va plus vite pour 2 MM alors qu'il est plus lent (relativement) pour un traitement plus petit en nombres On passe de 48 pour JS1 a 46 pour JS2.Comme pour tes 2 progs en C C'est lié a la facon dont les NP sont stockés Ce qu'on perd au depart , on le regagne par la suite.