# -*- coding:utf-8 -*- __projet__ = "CoursS5" __nom_fichier__ = "7_periode" __author__ = "Anne-Julie TINET" __date__ = "novembre 2022" """ ======================================================================================================================== Ex. 7 - PERIODE D'UN NOMBRE RATIONNEL ======================================================================================================================== """ # Définition de fonctions def pgcd_euclide(a, b): """ :param a: nombre entier :param b: nombre entier :return: Plus grand commun diviseur (PGCD) de a et b """ if b == 0: return None # On rend les deux nombres positifs (le PGCD est positif) a, b = abs(a), abs(b) # Algorithme d'Euclide r = a%b while r != 0: a, b = b, r r = a%b return b def irreductible(a, b): """ :param a: nombre entier (numérateur) :param b: nombre entier (dénominateur) :return: numérateur et dénominateur de la fraction irréductible de a/b """ p = pgcd_euclide(a, b) return a//p, b//p def periode(a, b): """ :param a: nombre entier, numérateur de la fraction :param b: nombre entier, dénominateur de la fraction :return: période de la fraction """ a, b = irreductible(abs(a),abs(b)) quotients = [a//b] # Liste des quotients restes = [] # Liste des restes r = a%b # La période est déterminée par deux restes identiques dans la liste des restes while r not in restes: restes.append(r) a = r*10 r = a%b quotients.append(a // b) # On recherche la position du 1er reste i = restes.index(r) return quotients[i+1:] # Programme principal if __name__ == '__main__': # Calcul du PGCD print(pgcd_euclide(5,0)) print(pgcd_euclide(4,6)) print(pgcd_euclide(7,49)) # Fraction irreductible print(irreductible(4,6)) # Période print(periode(74,14)) print(periode(73,6)) print(periode(10,5))