#!/usr/bin/python
# -*- coding: utf-8 -*-

# 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):
    if b==0:
        return a
    else:
        r=a%b
        return pgcd(b,r)

# 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),'.')
