from math import *

#L'utilisation de decimal permettra des calculs précis
#(27 chiffres après la virgule) sur les nombres
#en format décimal

from decimal import *

#Méthode: Briggs sait extraire la racine carrée
#Tant qu'une des bornes n'est pas proches de la valeur souhaitée, on détermine deux suites :
#l'une géométrique converge vers  x.
#l'autre arithmétique converge vers le logarithme décimal de x.

def methode_de_Briggs(N):
    x=Decimal(N)#Conversion en Decimal pour garder la précision - N est dans ]1;10]
    A=Decimal(1)
    B=Decimal(10)
    logA=Decimal(0) # lnA est initialisé à 0=ln(1)
    logB=Decimal(1) # lnB est initialisé à 1
    while B-x>10**(-5):
        # on teste suivant  si x est supérieur ou inférieur à la moyenne géométrique de A et B
        if (A*B).sqrt()<=x : #racine carrée extraite avec la bibliothèque decimal
            A=(A*B).sqrt() # A prend comme valeur la moyenne géométrique de A et B
            logA=(logA+logB)/2 #logA prend comme valeur la moyenne arithmétique de logA et logB
        else :
            B=(A*B).sqrt()
            logB=(logA+logB)/2
    return logB

# programme principal
N=float(input('choisir un nombre strictement supérieur à 1 et inférieur à 10 : '))
if N>10 or N<1 :
    print('le nombre demandé est compris entre 1 et 10')
else :
    logN=methode_de_Briggs(N)
    print (" le logarithme décimal de ",N," est :", logN) # affichage de log(N)
    print ( " le logarithme neperien de ", N,"est :", logN*Decimal(log(10))) #affichage de ln(N)
