Re,
Oui, rien d'autre à faire qu'à remplacer cette ligne :
n,t,h=100,44,44
par celle-ci :
n,t,h=100,52,52
Et pour l'affichage, remplacer 44 par 52:
print ("Les",t,"derniers chiffres de a sont :\n",str(a)[n-52:])
Les fonctions spow et powmod du script sont utilisables par ailleurs.
Une fois écrites, je me suis empressé de les tester sur de très grand nombres permettant d'obtenir les résultats "normalement" avec Python afin de pouvoir les comparer.
Pour le spow, elle ne fait que calculer $x^n$...
Pour le powmod, il calcule : [tex]base^n \mod modulo[/tex]
Exemple
>>> 19**23%732
595
>>> powmod(19,23,732)
595
>>>
d'après
https://fr.wikipedia.org/wiki/Exponentiation_modulaire
Concernant la ligne
a=powmod(t,a,spow(5,n-j)*spow(2,n-j))
tu pourrais la remplacer par
a=powmod(t,a,spow(10,n-j))
Mais il se trouve qu'il est plus rapide de calculer spow(5,n-j)*spow(2,n-j) que spow(10,n-j)...
On n'y touche pas...
*************************************************
* ... TETRATION ... *
* Calcul des 52 derniers chiffres de 52^^52 *
*************************************************
Affichage des 100 derniers chiffres :
5831823324290066923024554781104826055945407673063907049794759811500241366481758566832663580047835136
Extraction des 52 derniers chiffres :
3907049794759811500241366481758566832663580047835136
Calculs exécutés en 0.019001245498657227 s
Script adapté avec 52
#!/usr/bin/env python
# -*- coding: utf8 -*-
from time import time
def spow(x,n):
e = (n - n % 2)//2
y = (x**2)**e
if n%2:
y*=x
return y
def powmod(base,n,modulo):
result=1
while n>0:
if (n & 1)>0:
result=(result*base)% modulo
n>>=1
base=(base*base)% modulo
return result
n,t,h=100,52,52
a=t
print (" *************************************************")
print (" * ... TETRATION ... *")
print (" * Calcul des",t,"derniers chiffres de "+str(t)+"^^"+str(t)+" *")
print (" *************************************************")
print ("\n\n")
debut=time()
for j in range(h-1,-1,-1):
a=powmod(t,a,spow(5,n-j)*spow(2,n-j))
Duree=time()-debut
print()
print("Affichage des",n,"derniers chiffres :\n",a)
print ("Extraction des",t,"derniers chiffres :\n",str(a)[n-52:])
print("\nCalculs exécutés en "+str(Duree),"s"):
Ça te va ?
@+