Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

Répondre

Veuillez composer votre message et l'envoyer
Nom (obligatoire)

E-mail (obligatoire)

Message (obligatoire)

Programme anti-spam : Afin de lutter contre le spam, nous vous demandons de bien vouloir répondre à la question suivante. Après inscription sur le site, vous n'aurez plus à répondre à ces questions.

Quel est le résultat de l'opération suivante (donner le résultat en chiffres)?
quatre-vingt quatorze moins cinquante neuf
Système anti-bot

Faites glisser le curseur de gauche à droite pour activer le bouton de confirmation.

Attention : Vous devez activer Javascript dans votre navigateur pour utiliser le système anti-bot.

Retour

Résumé de la discussion (messages les plus récents en premier)

Michel Coste
09-09-2018 14:04:15

Ce code :

https://github.com/timothy-reasa/Python … uler188.py

fait visiblement l'erreur grossière de calculer comme si  [tex] b\equiv c \pmod{n} \Rightarrow a^b\equiv a^c \pmod{n}[/tex].

Dattier
09-09-2018 13:06:59

Désolé je bugg, et mon pc aussi, il me donne des résultats diffèrents pour un même programme.
A ce stade c'est plus des maths mais de la sorcellerie lol.

Mais cela tourne autour du résultat 1.

bbil
09-09-2018 12:38:25

Re,

entre temps grâce à ce fil de messagerie j'ai pu mieux cibler mes recherches internet ( tetration modulo..)  et du coup j'ai trouvé un code python :

https://github.com/timothy-reasa/Python … uler188.py


et ce code m'a permis de valider l’énigme  ,  ce qui est étonnant c'est que dans le résultat trouvé avec votre code il n'y as un qu'un chiffre de faux le premier 3 qui devrait être 9 :

9907049794759811500241366481758566832663580047835136

merci pour vos réponses qui m'on permis de trouver la bonne voie .. A+ pour une autre énigme peut-être ...

Dattier
09-09-2018 12:13:01

Je viens de tester l'algo sur de petite valeur l'algo est effectivement faux

Dattier
09-09-2018 11:59:37
yoshi a écrit :

Diable, l'algo de Dattier serait-il faux ?...

La seule chose dont je suis sûr c'est qu'il arrive que je me trompe.

Mais ici j'ai explicité (résultat 1 et 2) les raisons pour lesquels je pense avoir raison.

Dattier
09-09-2018 11:58:11

choses moins intéressantes

yoshi
09-09-2018 11:41:57

Re,

n'y as t'il pas de MP sur ce forum ?

Non.

pour l'énigme d'autres "concurents" l'ont résolue

Diable, l'algo de Dattier serait-il faux ?...

@+

Dattier
09-09-2018 11:39:44

choses moins intéressantes

bbil
09-09-2018 11:33:56

Bonjour,

oui on trouve toujours le même résultat avec ce nouveau code , pour l'énigme d'autre "concurents" l'on résolu est donc on peu estimer qu'il n'y a pas d'erreur (où ils ont fait tous la même ..)


n'y as t'il pas de MP sur ce forum ?

cdt.

yoshi
09-09-2018 09:50:54

Re,

J'ai repris...
Cette fois, je ne vois pas d'erreur ; je puis un peu surpris que avoir utilisé [tex]2^{n-j}[/tex] au lieu de [tex]2^{n+j}[/tex] ne change pas le résultat.
Ceci dit, l'auteur de l'énigme initiale : les 44 derniers chiffres de 44^^44, s'était trompé dans le résultat et finalement a reconnu que celui fourni par Dattier était le bon.
S'il s'agit du même auteur, pour les 52 derniers chiffres de 52^^52, peut-être s'est-il, lui de nouveau trompé ?...

Attendons...

@+

yoshi
09-09-2018 07:20:49

Re,

J'ai tout revérifié par rapport à ce que disait Dattier,

j'ai trouvé une petite erreur opératoire... qui ne change pas le résultat.
Code conforme à celui de Dattier en Maple.
Petite erreur : il faut écrire

#!/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))  # ligne corrigée spow(2,n+j) au lieu de spow(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"):
 

La vraie explication est là : page 2, post #40

Je vais donc aller déjeuner, puis :
- je reprendrai toutes les explications de Dattier,
- si je ne vois rien,je solliciterai Dattier pour comprendre...

@+

bbil
08-09-2018 22:07:01

bonsoir,

en fait dans la suite de l'enigme une procédure permet de vérifier le résultat obtenu..

yoshi
08-09-2018 19:11:49

Salut,

Et c'est quoi la suite de l'énigme ?

@+

bbil
08-09-2018 18:26:35

Merci, yoshi , c'est bien ce que j'avais fait ... mais non le résultat ne passe pas la suite de l'énigme...

et donc je me disais que peut-être la simplification pour 52 n'était pas la même que pour 44..

yoshi
08-09-2018 16:33:36

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 ?

@+

Pied de page des forums