Logo Les Interros des Lycées
06-12.py
Programme Python de l'Interros des Lycées 1re NSI
# saisie des deux nombres
a,b = 1.1,1.1

while a!= int(a): # tant que a n'est pas entier
    a = float(input("Entrez un nombre entier a : "))
while b!=int(b): # tant que b n'est pas entier
    b = float(input("Entrez un nombre entier b : "))

# fonction pgcd

def pgcd(a,b):
    while b!=0:
        r = a%b
        a,b = b,r
    return a

# simplifier une fraction

def simplify(a,b):
    p = pgcd(a,b)
    a = int(a/p) # int -> évite l'affichage au format xx.0
    b = int(b/p)
    return [a,b]

# liste des nombres premiers

def listprimes(n):
    tab = [2] # 2 est le premier nombre premier
    for i in range(3,int(n)+1):
        prime = True
        for j in tab:
            if i%j == 0:
                prime = False
        if prime == True:
            tab.append(i)
    return tab


# décomposition en produit de facteurs premiers

def decomp(n):
    # déclaration du dictionnaire :
    # clé -> facteurs premiers, valeur -> exposants
    dico = {}
    for i in listprimes(n):
        if n%i == 0:
            e = 0 # exposant initial
            m = n
            while m%i == 0:
                m = m/i
                e += 1
            dico[i] = e
    return dico

# ppcm

def ppcm(a,b):
    result = 1
    for fact,exp in decomp(a).items():
        if fact in decomp(b).keys():
            result *= fact**max(exp,decomp(b).get(fact))
        else:
            result *= fact**exp
    for fact,exp in decomp(b).items():
        if fact not in decomp(a).keys():
            result *= fact**exp
    return result

print("La fraction simplifiée de",int(a),"/",int(b)," est",simplify(a,b)[0],"/",simplify(a,b)[1],".")
print("Le plus petit multiple commun de",int(a),"et",int(b),"est",ppcm(a,b),".")