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.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.