Bill Allombert on Sun, 20 Nov 2022 12:29:08 +0100 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: Fonction parforprime et sortie en désordre |
On Sun, Nov 20, 2022 at 12:04:41PM +0100, Jean-Luc ARNAUD wrote: > Bonjour, > > Toujours en phase de découverte de Pari/GP, je ne trouve pas de solution à > ce problème. > > La commande suivante : > > ? forprime(i=2,100,if(ispseudoprime(2^i-1,1),print ("2^",i,"-1 est > Premier"),print (strchr(9),"2^",i,"-1 est non Premier"))) > > fournit bien le résultat escompté, ci-dessous : > > Par contre, la même commande en mode MT : > > ? parforprime(i=2,100,if(ispseudoprime(2^i-1,1),print ("2^",i,"-1 est > Premier"),print (strchr(9),"2^",i,"-1 est non Premier"))) > > fournit un résultat en désordre : > > Je comprends bien la raison de ce désordre, dû au fait que le MT retourne > les résultats au fur et à mesure qu'ils sont calculés, dans un ordre non > linéaire. > Ma question porte plutôt sur la manière d'éviter cela, si elle existe (en > dehors de se passer du MT) : stocker les résultats dans une variable chaîne Il y a la solution de triant le fichier de sortie à la fin, mais la bonne solution est d'utiliser la version complète de parforprime et une Map ou une List pour stocker les résultats [[ Use the full parforprime version and a Map or a List to store results ] { my(M=Map()); /* Compute values */ parforprime(i=2,100,ispseudoprime(2^i-1,1) ,e,mapput(~M,i,e)); /* print them */ foreach(Vec(M),i, if(mapget(M,i), print ("2^",i,"-1 est Premier") ,print (strchr(9),"2^",i,"-1 est non Premier"))); } Sincèrement, Bill.