Equation diophantienne du 1er degré (méthode d'euler)

Soyez le premier à donner votre avis sur cette source.

Vue 6 382 fois - Téléchargée 333 fois

Description

Résolution d'une équation diophantienne du premier degre (ax + by = c) suivant la méthode d'Euler.
VB avec une interface sommaire excel.
Un emprunt à ??? pour le calcul du pgcd.

Source / Exemple :


Sub Calcul(a, b, c, x0, xk, y0, yk)

    '           Equation diophantienne     méthode d'Euler
    
    '   ax + by = c         ( a et b premiers entre eux)
    '       x = x0 + xk * k
    '       y = y0 + yk * k

    Dim v(1002, 8) As Long
    
    v(1, 1) = a
    v(1, 2) = b
    v(1, 3) = c
    
    For nb = 2 To 1000
    
        v(nb, 1) = v(nb - 1, 2) - Fix(v(nb - 1, 2) / v(nb - 1, 1)) * v(nb - 1, 1)
        If v(nb, 1) = 0 Then nb = nb - 1: Exit For
        v(nb, 2) = v(nb - 1, 1)
        v(nb, 3) = v(nb - 1, 3) - Fix(v(nb - 1, 3) / v(nb - 1, 1)) * v(nb - 1, 1)
        
        v(nb, 4) = -Fix(v(nb - 1, 2) / v(nb - 1, 1))
        v(nb, 5) = 1
        v(nb, 6) = Fix(v(nb - 1, 3) / v(nb - 1, 1))
        
    Next nb
    
    v(nb + 1, 7) = -v(nb, 2) * v(nb, 1)
    v(nb + 1, 8) = v(nb, 3) * v(nb, 1)
    v(nb + 2, 7) = 1
    
    For i = nb To 2 Step -1
        
        v(i, 7) = v(i, 4) * v(i + 1, 7) + v(i, 5) * v(i + 2, 7)
        v(i, 8) = v(i, 4) * v(i + 1, 8) + v(i, 5) * v(i + 2, 8) + v(i, 6)
        
    Next i
    
    x0 = v(2, 8)
    xk = v(2, 7)
    y0 = v(3, 8)
    yk = v(3, 7)
    
End Sub

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Philippe222
Messages postés
6
Date d'inscription
mercredi 21 décembre 2005
Statut
Membre
Dernière intervention
26 juillet 2009
-
Bonjour,
Merci à Apexinfo, car la modif n'a pas été prise en compte. Il faut l'ajouter par soi-même.
apexinfo
Messages postés
5
Date d'inscription
mercredi 21 janvier 2004
Statut
Membre
Dernière intervention
28 janvier 2010
-
ya un bug pour b<0
il faut rajouter juste après : next nb

If v(nb, 1) = -1 Then
v(nb, 1) = -v(nb, 1)
v(nb, 2) = -v(nb, 2)
v(nb, 3) = -v(nb, 3)
End If

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.