Powmod( ) problème

Utilisation de Xcas

Modérateur : xcasadmin

dheroux
Messages : 4
Inscription : lun. mars 12, 2012 7:43 am

Powmod( ) problème

Message par dheroux » mar. déc. 03, 2013 3:19 pm

Bonjour,

Powmod(3,346 111 643,346 111 643) donne pour résultat 3

Or une procédure que j'ai écrit en VB Net 2010 me donne comme résultat 150 180 452 et non 3. Cette procédure est en parfait accord avec Powmod SAUF pour ce cas particulier.
J'ai écrit également cette procédure sous Excel 2013, qui me donne encore 150 180 452.


Voir mon document récapitulatif:
http://www.dheroux.net/Modulo.txt

Merci.

Cheval
Messages : 66
Inscription : mar. sept. 24, 2013 7:51 pm

Re: Powmod( ) problème

Message par Cheval » mar. déc. 03, 2013 3:46 pm

Bonjour,
juste pour info, Maxima avec la fonction équivalente power_mod donne le même résultat que Xcas, à savoir 3
et Xcas, avec la commande
irem(3^346111643,346111643)
répond :
"Exponent overflow Erreur: Valeur Argument Incorrecte"
Mais je suppose que powmod a un algo optimisé par rapport à cette dernière commande…

parisse
Messages : 5743
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: Powmod( ) problème

Message par parisse » mar. déc. 03, 2013 5:21 pm

Et la réponse de Xcas et Maxima est juste puisque p=346111643 est premier donc a^p=a mod p.
L'algorithme en VB n'est pas très simple, difficile de savoir où est l'erreur, peut-etre un overflow sur les entiers?
Une remarque on n'a pas besoin de calculer à l'avance la décomposition en base 2 de l'exposant, on peut le faire en même temps par division euclidienne de l'exposant par 2.

Code : Tout sélectionner

f(a,n,p):={
  local a2p,res;
  res:=1;
  a2p:=a;
  tantque n!=0 faire
    si irem(n,2) alors res:=irem(res*a2p,p); fsi;
    a2p:=irem(a2p*a2p,p);
    n:=iquo(n,2);
  ftantque;
  retourne res;
}:;

Répondre