| 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.