ast
2018-03-15 11:34:04 UTC
Connaissez vous le théorème de Lamé ?
Je l'ai découvert ce matin et je le trouve joli.
Alors le voici:
Le nombre d'étapes de l'algorithme d'Euclide pour
trouver le PGCD de 2 nombres a et b avec b <= a
est majoré par E(Ln(b)/Ln(phi)) où E() désigne la
partie entière et phi est le nombre d'or.
La majoration est atteinte quand a et b sont 2
nombres de Fibonacci consécutifs
-Algorithme d'Euclide (en python):
def gcd(a, b):
steps=0
while b:
a, b = b, a%b
steps += 1
return a, steps
-Suite de Fibonacci:
def fibonacci(n):
if n==0: return 0
a, b, = 0, 1
for i in range(n-1):
a, b = b, a+b
return b
Avec 2 entiers de Fibonacci consécutifs, je trouve toujours 1 de plus
que la majoration théorique
donc 96 étapes
soit 95 étapes
si quelqu'un voit où ça cloche ?
Je l'ai découvert ce matin et je le trouve joli.
Alors le voici:
Le nombre d'étapes de l'algorithme d'Euclide pour
trouver le PGCD de 2 nombres a et b avec b <= a
est majoré par E(Ln(b)/Ln(phi)) où E() désigne la
partie entière et phi est le nombre d'or.
La majoration est atteinte quand a et b sont 2
nombres de Fibonacci consécutifs
-Algorithme d'Euclide (en python):
def gcd(a, b):
steps=0
while b:
a, b = b, a%b
steps += 1
return a, steps
-Suite de Fibonacci:
def fibonacci(n):
if n==0: return 0
a, b, = 0, 1
for i in range(n-1):
a, b = b, a+b
return b
Avec 2 entiers de Fibonacci consécutifs, je trouve toujours 1 de plus
que la majoration théorique
[fibonacci(i) for i in range(100)][-3:-1]
[83621143489848422977, 135301852344706746049]gcd(135301852344706746049, 83621143489848422977)
(1, 96)donc 96 étapes
math.log(83621143489848422977)/math.log(1.61803398875)
95.32772406180257soit 95 étapes
si quelqu'un voit où ça cloche ?