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 entier 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 #on incrémente le compteur de colonnes #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 if d != 9 : D[k] += 1 #on ajoute 1 à la décimale précédente anomalie=1 #on met le détecteur d'anomalie à true else : if D[k-1] != 9: D[k-1] += 1 #on ajoute 1 à la décimale juste avant la précédente D[k]=0 #on met la décimale précédente à 0 anomalie=1 #on met le détecteur d'anomalie à true else : D[k-2] += 1 #on ajoute 1 à la décimale juste avant celle d'avant la précédente.... D[k-1]=0 D[k]=0 anomalie=1 if anomalie ==1 : #si une anomalie vient d'être détectée, on ajoute un 0 D.append(0) 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) for i in range(n) : if D[i]== 10 : print("problème")