Re: Fonction parforprime et sortie en désordre
Bill Allombert <[email protected]>
| Newsgroups | gmane.comp.mathematics.pari.devel |
|---|---|
| Message-ID | <Y3oPRo77n+j0hXeN@seventeen> |
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.