Les Snippets

Connexion

Exponentiation Modulaire Rapide

Niveau requis pour utiliser/comprendre cette source : 1 ( Débutant )
Créé le 26/11/2009 23:37:29 et initié par us_30 [Liste]
Date de mise à jour : 07/12/2009 16:27:39
Vue : 1076
Catégorie(s) : Maths
Langages dispo pour ce code :
- VB6, VBA
- Delphi 5



Langage : VB6 , VBA
Date ajout : 26/11/2009
Posté par us_30 [Liste]
Function ExpoMod(ByVal p As Long, ByVal j As Long, ByVal n As Long) As Long ' EXPONENTIATION MODULAIRE RAPIDE ExpoMod = 1 Do If j And 1 Then j = j - 1: ExpoMod = p * ExpoMod ExpoMod = ExpoMod Mod n j = j / 2 p = (p * p) Mod n Loop Until j = 0 End Function
Remarque :
ExpoMod(2,13,5) renvoie 2.
car 2^13 mod 5 => 8192 mod 5 = 1638*5 + 2
Langage : Delphi 5
Date ajout : 03/12/2009
Posté par Bacterius [Liste]
DateMAJ : 07/12/2009
function ExpMod(n, e, m: Longword): Longword;
begin
  Result := 1{ Initialisation }
  while e <> 0 do { Tant que l'exposant n'est pas arrivé à 0 }
  begin
    if (e and 1) <> 0 then { Si e est impair }
    begin
      Dec(e); { On décrémente e }
      Result := Result * n; { On multiplie le résultat par n }
    end;
   Result := Result mod m; { On prend le résultat modulo m }
   e := e shr 1; { On divise e par deux (décalage binaire ici ) }
   n := Sqr(n) mod m; { On effectue l'exponentiation modulaire }
  end;
end;
Remarque :
Effectue une exponentiation modulaire de n à la puissance e modulo m.
Attention à ne pas mettre de trop grandes valeurs de n, car si n² > 2^32, la fonction ne va plus fonctionner à cause des limitations du Longword.
Exemple : ExpMod(61, 3, 23) = 17

Snippets en rapport avec : Exponentiation, Modulaire, Rapide



Codes sources en rapport avec : Exponentiation, Modulaire, Rapide

{C / C++ / C++.NET} MEILLEURE MÉTHODE POUR CALCULER UN PUISSANCE
la méthode la plus naive pour calculer par ex: x^15 = x*...*x(14 operations) ---------- mieux: x...

{Flash} AS3 PROTOTYPE
Programez différent... J'ai pas eu le temps de mettre de commentaire puisque j'ai fait cette sour...

{C / C++ / C++.NET} EASYLIB WIN32 C++ POUR DU PROTOTYPAGE RAPIDE
EasyLib est une bibliothèque de petites classes en c++ pour créer rapidement des application Win32. ...

{Visual Basic, VB6, VB.NET, VB 2005} LIGHT CODES-SOURCES
(ex-Light VBFrance) Ce programme permet de surfer sur Codes-Source très simplement. Le temps de ch...

{C / C++ / C++.NET} LE QUICKSORT NON-RECURSIF ET L'IMPACT DE L'INSERTIONSORT SUR SES PERFORMANCES
Je depose cette source en rapport avec une discussion sur les performances du tri rapide (quicksort)...

{Flash} EVENTREGISTRATION : CLASSE GÉRANT DES OPÉRATION "EVENTLISTENER" ?REPITITIVES...
Apres des mois de prog an AS3. je mne suis vite rendu compte que la gestion des évènements en AS3 es...

{Visual Basic, VB6, VB.NET, VB 2005} COPIER SERIE
Cette source permet de copier une zone de texte vers une autre application qui était active avant....

{PHP} SYSTEME DE CONNEXION IDENTIFIANT + LOGIN
gérè l'inscription la vérification et l'envoi de mail si perdu Le tout gérer sous Codeingner FRAME...

{C / C++ / C++.NET} CACUL (RAPIDE) DE PGCD
Encore une source sur le PGCD... c'est bon on le connait par coeur... cette source sera supprimee....

{PHP} STRINGBUILDER / STRINGBUFFER EN PHP (CLASSE SPÉCIALEMENT CONÇUE POUR MANIPULER DES CHAÎNES DE CARACTÈRES...)
A l'instar de StringBuilder et de StringBuffer en Java il peut être intéressant d'avoir une classe d...