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),".")