def pi(n): #n est le nombre souhaité de décimales #Obtenir la partie entière de pi digit=2 # initialisation de digit à 2 dans la base considérée r=[] # création liste des restes memoire=[] #création d'une liste pour garder en mémoire les restes nécessaires D =[] # création liste des décimales a=4*n # initialisation du nombre a max (ou nombre de colonnes nécessaires) b=2*4*n+1 # initialisation du nombre b max retenue =0 # initialisation de retenue à 0 somme = digit*10 + retenue #calcul de la somme 2*10+retenue while a !=0 : #calculs à rebours vers la colonne de gauche jusqu'à a=1 reste = somme % b #on calcule le reste de la division somme : b r.append(reste) #on mémorise le reste dans la liste quotient = somme //b #on calcule le quotient de la division somme : b retenue = quotient*a #on calcule la retenue de la colonne suivante a -=1 #on diminue a de 1 pour la colonne suivante b -=2 #on diminue b de 2 pour la colonne suivante somme = digit*10 + retenue #on calcule la somme pour la colonne suivante #sortie de boucle while d=somme//10 #on calcule la décimale obtenue D.append(d) #on ajoute la décimale dans la liste reste = somme % 10 #on calcule le reste pour la ligne suivante r.append(reste) #on ajoute le reste dans la liste memoire=r #on garde en mémoire les restes r=[] #on vide la liste r #Obtenir les chiffres derrière la virgule anomalie=0 #on initialise le détecteur d'anomalie à false for k in range(n) : #boucle jusqu'au rang n a=4*n # initialisation du nombre a max (ou nombre de colonnes nécessaires) b=8*n+1 # initialisation du nombre b max retenue=0 # initialisation de retenue à 0 c = 0 #initialisation du compteur de colonnes while a !=0 : #calculs à rebours vers la colonne de gauche jusqu'à a=1 digit=memoire[c] # initialisation de digit au reste somme = digit*10 + retenue reste = somme % b r.append(reste) #on ajoute le reste dans la liste quotient = somme // b retenue = quotient*a a -=1 #on diminue a de 1 pour la colonne suivante b -=2 #on diminue b de 2 pour la colonne suivante c +=1 #sortie de boucle while somme = memoire[c]*10+retenue #on met à jour la somme #écriture de la nouvelle décimale if somme // 10 < 10 : #si on obtient un chiffre par la procédure d= somme//10 #on calcule la décimale obtenue D.append(d) #on ajoute la décimale dans la liste anomalie=0 #on met le détecteur d'anomalie à false else : #si on n'obtient pas un chiffre anomalie = 1 #on a détecté une anomalie rang=k #on conserve le rang du chiffre avant l'anomalie D.append(0) #on met la décimale corerspondante à 0 au lieu de 10 while anomalie == 1 : #tant qu'il y a une anomalie if D[rang] != 9 : #si le chiffre d'avant n'est pas 9 anomalie=0 #fin de l'anomalie D[rang] +=1 #on ajoute la retenue 1 au chiffre d'avant else : anomalie=1 #sinon on conserve l'anomalie à true D[rang]=0 #on met la décimale d'avant à 0 rang -=1 #on diminue le rang de 1 reste = somme % 10 #on met à jour le reste pour le k suivant r.append(reste) #on ajoute le reste dans la liste memoire=r r=[] #on vide la liste r #fin de la boucle for #Affichage de la valeur approchée de Pi print(D)