Xya
Messages postés103Date d'inscriptionlundi 8 juillet 2002StatutMembreDernière intervention24 novembre 2005 1 déc. 2003 à 03:36
Bonne chance pour tes futurs algos, pense à les vérifier un minimum :)
Xya
JoVB
Messages postés87Date d'inscriptionlundi 4 novembre 2002StatutMembreDernière intervention10 mars 2009 30 nov. 2003 à 09:22
Merci beaucoup Xya pour cet algo (j'avais pas du tout pensé a faire comme ca.... c vrai que c + simple (et que ca marche)
Alors j'ai mis à jour la source avec ton algorithme (t'en fait pas j'ai bien mentionner que ce code venait de toi...)
Pour tout autre bug, merci de me le signaler...
//JoVB
Xya
Messages postés103Date d'inscriptionlundi 8 juillet 2002StatutMembreDernière intervention24 novembre 2005 29 nov. 2003 à 22:38
D'abord 5 * racine(2) n'est pas égal à racine(72) car 72 = 2 * 2 * 2 * 3 *3
donc racine(72) = 6 * racine(2). Sinon comme tu le dis faudrait mieux des Do ... While, c'est vraiment plus rapide et fiable:
'Décompose un nombre en facteurs premiers
Public Function Decompose(ByVal n As Long) As Collection
Dim temp As New Collection
Dim reste As Long
Dim i As Long
reste = n
Do While reste > 0
i = 1
Do While (i * i) <= reste
i = i + 1
If (reste Mod i) = 0 Then 'si reste est divisible par i
temp.Add i
reste = reste / i
Exit Do
End If
Loop
If (i * i) > reste Then 'si reste n'est pas divisible par i
temp.Add reste
Exit Do
End If
Loop
Set Decompose = temp
End Function
Public Sub SimplifieRacine(ByVal racine As Long, ByRef exposant As Long, ByRef radicande As Long)
Dim facteurs As Collection
Dim i As Long
Set facteurs = Decompose(racine)
'on commence à 1 * sqrt(racine)
exposant = 1
radicande = racine
For i = 1 To facteurs.Count
If i <> facteurs.Count Then
If facteurs(i) = facteurs(i + 1) Then 's'il ya deux facteurs communs (les facteurs sont en ordre croissant)
'le facteur est extrait de la racine
exposant = exposant * facteurs(i)
radicande = radicande / (facteurs(i) * facteurs(i))
i = i + 1 'ignorer le facteur suivant
End If
End If
Next
End Sub
17 nov. 2005 à 18:29
Bonne prog
//JoVB
1 déc. 2003 à 03:36
Xya
30 nov. 2003 à 09:22
Alors j'ai mis à jour la source avec ton algorithme (t'en fait pas j'ai bien mentionner que ce code venait de toi...)
Pour tout autre bug, merci de me le signaler...
//JoVB
29 nov. 2003 à 22:38
donc racine(72) = 6 * racine(2). Sinon comme tu le dis faudrait mieux des Do ... While, c'est vraiment plus rapide et fiable:
'Décompose un nombre en facteurs premiers
Public Function Decompose(ByVal n As Long) As Collection
Dim temp As New Collection
Dim reste As Long
Dim i As Long
reste = n
Do While reste > 0
i = 1
Do While (i * i) <= reste
i = i + 1
If (reste Mod i) = 0 Then 'si reste est divisible par i
temp.Add i
reste = reste / i
Exit Do
End If
Loop
If (i * i) > reste Then 'si reste n'est pas divisible par i
temp.Add reste
Exit Do
End If
Loop
Set Decompose = temp
End Function
Public Sub SimplifieRacine(ByVal racine As Long, ByRef exposant As Long, ByRef radicande As Long)
Dim facteurs As Collection
Dim i As Long
Set facteurs = Decompose(racine)
'on commence à 1 * sqrt(racine)
exposant = 1
radicande = racine
For i = 1 To facteurs.Count
If i <> facteurs.Count Then
If facteurs(i) = facteurs(i + 1) Then 's'il ya deux facteurs communs (les facteurs sont en ordre croissant)
'le facteur est extrait de la racine
exposant = exposant * facteurs(i)
radicande = radicande / (facteurs(i) * facteurs(i))
i = i + 1 'ignorer le facteur suivant
End If
End If
Next
End Sub
Avec ce code, on trouve:
72 = {2 * 2 * 2 * 3 * 3}
racine(72) = 6 * racine(2)
50 = {2 * 5 * 5}
racine(50) = 5 * racine(2)
Donc c'est racine(50) qui est égal à 5 * racine(2) (ton prog affiche la même valeur pour racine(72) et racine(50))
Xya
29 nov. 2003 à 11:29
//JoVB