# _______________________________________________ # # APPLICATION 4 : l'algorithme 196 # _______________________________________________ # =============================================== # Déclaration des 4 fonctions # =============================================== # FONCTION inverse_chaine(chaine) : def inverse_chaine(chaine): return chaine[::-1] # =============================================== # FONCTION inverse_nombre(nombre) : def inverse_nombre(nombre): return int(inverse_chaine(str(nombre))) # =============================================== # FONCTION affiche_196(depart) : def affiche_196(depart): print('depart = %d' % depart) n=depart while n!=inverse_nombre(n): resultat=n+inverse_nombre(n) print('%d + %d = %d' % (n,inverse_nombre(n),resultat)) n=resultat # =============================================== # FONCTION iteration_196(depart) : def iteration_196(depart): iteration=0 n=depart while n!=inverse_nombre(n): resultat=n+inverse_nombre(n) n=resultat iteration=iteration+1 if iteration>65: return -1 return iteration # =============================================== # Programme principal # =============================================== # QUESTION 2 : # Le premier nombre qui possède 10 itérations est 829 print("===============================") print('QUESTION 2 :') a=0 while iteration_196(a)!=10: a=a+1 affiche_196(a) print("Pour le nombre de départ %d il y a %d iterations" % (a,iteration_196(a))) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # QUESTION 3 : 196 ne mène pas à un palindrome (nombre infini d'itérations) print("===============================") print('QUESTION 3 :') print("si depart=%d alors iteration=%d" % (196,iteration_196(196))) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # QUESTION 4 : pour depart=150296 on a iteration=64 (valeur maxi) # Il y a 126 nombres qui possédent 64 itérations print("===============================") print('QUESTION 4 :') maxi=0 for a in range(1,10**6+1): if iteration_196(a)>maxi: maxi=iteration_196(a) print("depart=%d et iteration=%d" % (a,iteration_196(a))) print('----------------------------') print("Le nombre maximal d'itérations est %d" % maxi) print('----------------------------') print('Voici tous les nombres de départ qui ont 64 itérations :') n=0 for a in range(1,10**6+1): if iteration_196(a)==64: print("depart=%d et iteration=%d" % (a,iteration_196(a))) n=n+1 print('Entre 1 et 1 million il y a %d nombres qui possédent 64 itérations' % n) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # QUESTION 5 : #Il y a 115752 nombres qui possédent un nombre infini d'itérations #Il y a 884248 nombres qui aboutisse à un palyndrome #Soit 88.4 % qui aboutisse à un palyndrome print("===============================") print('QUESTION 5 :') infini=0 for a in range(1,10**6+1): if iteration_196(a)==-1: infini=infini+1 print("Il y a %d nombres qui possédent un nombre infini d'itérations" % infini) print("Il y a %d nombres qui aboutissent à un palindrome" % (10**6-infini)) print("Soit %.1f %% de nombres qui aboutissent à un palindrome (entre 1 et 1 million)" % (((10**6-infini)*100)/10**6)) # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # QUESTION 6 : à partir de 65 itérations (voir la fonction iteration_196(depart) ligne 38) print("===============================") print('QUESTION 6 : à partir de 65 itérations (voir la fonction iteration_196(depart) ligne 32)') # =============================================== # Fin du programme principal # ===============================================