Function D(N As Double) As String 'décompose N en nombres premiers
Dim liste As New Collection, i As Double, j As Long
If N = 0 Or Int(N) <> N Then Exit Function
'---Liste des nombres premiers---
liste.Add 2
Calcul_D N, 2, D
If D <> "" Then If Evaluate(D) = N Then Exit Function
For i = 3 To N Step 2
For j = 2 To liste.Count
If liste(j) ^ 2 > i Then Exit For
If i - liste(j) * Int(CDec(i / liste(j))) = 0 Then GoTo 1
Next
liste.Add i
Calcul_D N, i, D
If D <> "" Then If Evaluate(D) = N Then Exit Function
1 Next
If D = "" Then D = N
End Function
Sub Calcul_D(N As Double, NP As Double, D As String)
If N - NP * Int(CDec(N / NP)) Then Exit Sub
Dim i As Long
i = 1
1 i = i + 1
If N - (NP ^ i) * Int(CDec(N / (NP ^ i))) = 0 Then GoTo 1
D = D & IIf(D = "", "", "*") & NP & IIf(i = 2, "", "^" & i - 1)
End Sub
Function DD(N As Double) As String 'décompose N en nombres premiers
Dim liste As New Collection, i As Double, j As Long
If N = 0 Or Int(N) <> N Then Exit Function
'---Liste des nombres premiers---
liste.Add 2
Calcul_DD N, 2, DD
If DD <> "" Then If Evaluate(DD) = N Then Exit Function
For i = 3 To N Step 2
For j = 2 To liste.Count
If liste(j) ^ 2 > i Then Exit For
If i - liste(j) * Int(CDec(i / liste(j))) = 0 Then GoTo 1
Next
liste.Add i
Calcul_DD N, i, DD
If DD <> "" Then If Evaluate(DD) = N Then Exit Function
1 Next
If DD = "" Then DD = N
End Function
Sub Calcul_DD(N As Double, NP As Double, DD As String)
If N - NP * Int(CDec(N / NP)) Then Exit Sub
Dim i As Long
i = 1
1 i = i + 1
If N - (NP ^ i) * Int(CDec(N / (NP ^ i))) = 0 Then GoTo 1
DD = DD & Application.Rept("*" & NP, i - 1)
If Left(DD, 1) = "*" Then DD = Mid(DD, 2)
End Sub