dionys0s
XLDnaute Impliqué
Bonjour le forum,
j'aimerais créer ma propre fonction de calcul du plus petit commun multiple de n nombres (i.e. grâce à un ParamArray).
J'ai déjà créé celle du plus grand commun diviseur, mais je n'arrive pas à faire celle du plus petit commun multiple.
Je pensais naïvement qu'il s'agissait du produit des n paramètres divisé par le PGCD des n paramètres, mais je me trompe.
Sur la toile je ne trouve que des définitions de PPCM pour 2 nombres, pas pour n. Quelqu'un a-t-il une idée ?
D'avance merci pour toute aide
j'aimerais créer ma propre fonction de calcul du plus petit commun multiple de n nombres (i.e. grâce à un ParamArray).
J'ai déjà créé celle du plus grand commun diviseur, mais je n'arrive pas à faire celle du plus petit commun multiple.
Je pensais naïvement qu'il s'agissait du produit des n paramètres divisé par le PGCD des n paramètres, mais je me trompe.
VB:
Sub TesterLcm()
Dim Lng As Long
MsgBox Excel.Application.WorksheetFunction.Lcm(132, 72, 21) & " - " & Lcm(132, 72, 21)
End Sub
Public Function Lcm(ParamArray Args() As Variant) As Long 'Least Common Multiple
Dim k As Long
k = LBound(Args): Lcm = Args(k): Do: k = k + 1
Lcm = Lcm * Args(k): Loop Until k = UBound(Args)
Lcm = Lcm / Gcd(Args)
End Function
Public Function Gcd(ParamArray Args() As Variant) As Long 'Greatest common divisor
Dim k As Long
k = LBound(Args): Gcd = Args(k): Do: k = k + 1
sGcd Gcd, Args(k - 1) + 0, Args(k) + 0
Loop Until k = UBound(Args)
End Function
Private Sub sGcd(Rslt As Long, Nb1 As Long, Nb2 As Long)
Dim Remainder As Long
Remainder = MMod(Nb1 + 0, Nb2 + 0)
If Remainder = 0 Then
If Nb2 < Rslt Then Rslt = Nb2
Else: sGcd Rslt, Nb2, Remainder: End If
End Sub
Public Function MMod(Number As Double, Divisor As Double) As Long
MMod = Number - (Divisor * VBA.Fix(Number / Divisor)): End Function
Sur la toile je ne trouve que des définitions de PPCM pour 2 nombres, pas pour n. Quelqu'un a-t-il une idée ?
D'avance merci pour toute aide