Modulo sur un TRES TRES GRAND Nombre

Modulo sur un TRES TRES GRAND Nombre

Messagepar Michael DELIQUE » 25 Oct 2007 à 09:29

D'apres un code de D.Bugger

testé avec : 30003003930003728602468152776

Code : Tout sélectionner
Sub Initialize
   Print Modulo("068999999501111443", "97")
End Sub

Function Modulo(num As String, par As String)
   Dim lft As String, rgt As String
   Dim l As Integer
   
   l= Len(par)
   lft= Left$(num, l)
   rgt= Mid$(num, l+1)
   Do
      Call Modulo2(lft, par)
      lft= lft + Left$(rgt, 1)
      rgt= Mid$(rgt, 2)
   Loop While rgt<>""
   Call Modulo2(lft, par)
   Modulo= lft
End Function

Sub Modulo2(n1 As String, n2 As String)
   ' the ugly way...
   n1= Cstr(Clng(n1) Mod Clng(n2))   
End Sub


Code : Tout sélectionner
Function ModuloBigNumber(wNumber As String, wnbDiviseur As Long) As Integer
   
   'cette fonction permet de faire un modulo sur un tres grand nombre entier  ne pouvant pas être géré par la functon Mod
   Dim LeftNumber As String
   Dim RightNumber As String
   Dim i As Integer
   
   On Error Goto ErreurHandle
   
   If Trim(wNumber) = "" Then
      ModuloBigNumber = -1
      Exit Function
   End If
   
   'vérifie qu'il n'y que des chiffres
   If wNumber Like "*[!0-9]*"  Then
      ModuloBigNumber = -1
      Exit Function
   End If
   
   i = Len(Cstr(wnbDiviseur))
   LeftNumber = Left(wNumber, i)
   RightNumber = Mid(wNumber, i+1)
   
   Do
      LeftNumber = Cstr(Clng(LeftNumber) Mod wnbDiviseur)
      LeftNumber= LeftNumber + Left(RightNumber, 1)
      RightNumber= Mid(RightNumber, 2)
   Loop While RightNumber<>""
   
   ModuloBigNumber = Clng(LeftNumber) Mod wnbDiviseur
   
   RightNumber = ""
   LeftNumber = ""
   
   
   Exit Function
ErreurHandle:
   Msgbox "("+Cstr(Getthreadinfo (1))+" Call by "+Cstr(Getthreadinfo(10))+")"+Chr(10)+"Erreur " + Str(Err) + " : "+Chr(10) + Cstr(Error)+". "+Chr(10)+"Ligne N° "+Cstr(Erl),16," ERREUR !"
   ModuloBigNumber = -1
   Exit Function   
End Function
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy

Retour vers Divers