Inscription / Connexion Nouveau Sujet
Niveau exercices
Partager :

Développement décimal périodique

Posté par
Zormuche
13-03-19 à 20:01

Bonjour

je poste ça ici parce que je considère que c'est plus un défi qu'un exercice, c'est un défi optionnel qui permet de gagner des points bonus

C'est un exercice/défi à réaliser sur le logiciel Octave (ou Scilab, Matlab, mais on travaille sur Octave) assez difficile qui consiste à déterminer le plus petit entier n tel que l'écriture en base 2 de 1/n soit de période 156

J'ai voulu commencer en base 10 puisque c'est plus habituel, et je me demandais le lien entre n et la période p de l'écriture 1/n

n36791113
p116126
Après plusieurs réflexions je me suis dit qu'il y avait peut être un rapport avec le nombre N=10^p-1, puisque 1/N est un nombre d'écriture périodique dont le bloc périodique est constitué de p-1 "zéros" et 1 "un", et ce nombre semble engendrer toutes les écritures périodiques de période p

J'ai a priori formulé l'hypothèse suivante : p est le plus petit entier tel que n est congru à 1 modulo 10^p-1
mais c'est faux en regardant n=6

Posté par
dpi
re : Développement décimal périodique 14-03-19 à 09:28

Bonjour,
Bon,je sens qu'il va y avoir du python dans l'air...
Pour le moment j'ai ajouté à mon tableur binaire une annexe décimale limitée à 5...
Je vais observer les périodes

Posté par
verdurin
re : Développement décimal périodique 14-03-19 à 10:42

Bonjour,
à mon avis c'est pus facile en base deux qu'en base dix.

Posté par
LittleFox
re : Développement décimal périodique 14-03-19 à 12:06


Ce n'est pas difficile (La base 10 ou 2 ne change rien ou presque)
Et je pourrais me passer de python mais c'est tellement facile de l'utiliser

Comment est-ce qu'on peut avoir les décimales? Les décimales sont limitées dans python, matlab, excel et beaucoup d'autres langages/programmes mais ne pourrait-on pas n'avoir que des entiers?

Si On retourne en primaire et on utilise la division écrite.

On cherche à diviser 1 par n (par ex 7):

1         | 7
----------------------
10        | 0142857142...
 30       |
  20      |
   60     |
    40    |
     50   |
      10  |
       30 |
        20|
         .|
         .|
         .|


A chaque étape le reste r devient (r*b)%n. Si on a un reste qu'on a déjà obtenu alors on comme un nouveau cycle et on a notre période. Si le reste devient 0 alors le développement est fini et pas périodique.

On voit aussi que n doit être plus grand que 156 puisqu'il nous faut au moins 156 restes possibles en plus de 0.

Au final on cherche un n tel que {base}^{156} \equiv 1 \pmod{n}, et tel qu'il n'existe pas de x \in [1,155] \text{ tel que } {base}^{x} \equiv 1 \pmod{n}

Je n'ai pas prouvé que la solution existe en général mais dans le cas des bases 2 et 10 et la période 156, les solutions de sont pas loin de 157

Posté par
Zormuche
re : Développement décimal périodique 14-03-19 à 18:24

Très intéressant tout ça

de mon côté après un peu de recherche j'ai trouvé un article sur Wikipédia très complet sur ce sujet


On est obligés de travailler sur Octave, c'est la matière qui est faite comme ça

Après réflexion je pense que le plus simple est de créer une fonction qui fait la division euclidienne 1/n et qui s'arrête dès que le reste est répété

Posté par
LittleFox
re : Développement décimal périodique 14-03-19 à 18:26


Pour aller plus loin on a que b^{\phi(n)} \equiv 1 \pmod{n} si b et n sont premiers entre eux. Donc les n tel que \phi(n) = 156 sont des candidats.

Or 156 = 2.2.3.13 = (13-1)*13, donc un n qui convient est 13² = 169. Et on peut vérifier que c'est bien le cas.

Ça marche bien pour la base 2, un peu moins pour la base 10. Où la solution est donnée par n = 3121, \phi(3121)=3120 = 20\times156.

Mais en matlab pour des valeurs si petites, je testerais juste les n à partir de 157 en vérifiant que 2^{156} \equiv 1 \pmod{n} et que 2^x \not\equiv 1 \pmod{n}, x \in [1,155]

Posté par
Zormuche
re : Développement décimal périodique 14-03-19 à 18:59

J'ai une autre idée : exprimer N sous forme d'un produit d'une puissance de deux et d'un nombre M qui n'est pas multiple de 2

Ainsi la période de 1/N est la période de 1/M, qui n'est que  \lceil\log_2{M}\rceil  si je ne me trompe pas

Posté par
Zormuche
re : Développement décimal périodique 14-03-19 à 19:21

ça semble correct ; autrement voilà une à deux minutes que mon programme tourne pour trouver le premier 1/n de période 156

Posté par
Zormuche
re : Développement décimal périodique 14-03-19 à 19:34

Je me suis emballé trop vite ! ça marche pas !

Posté par
Zormuche
re : Développement décimal périodique 14-03-19 à 23:23

Bon, le problème est résolu ! j'ai fait une simulation de division euclidienne en base 2 comme a suggéré  LittleFox

Je vous avoue que ce n'est pas facile de faire ce genre de programme, du moins pour moi

Le plus petit entier dont le développement décimal en base 2 a une période de 156 est
169
Les suivants sont : 313, 371, 395, 477, 507...

Posté par
Zormuche
re : Développement décimal périodique 14-03-19 à 23:24

dont le développement décimal de 1/n en base 2 bien sûr, sinon ça n'a pas de sens !

Posté par
LittleFox
re : Développement décimal périodique 15-03-19 à 10:17


En python (oui je sais, j'avais dit que j'évitais ), ça donne quelque chose comme ceci :

def getDigits(n,base=2):
   r = 1
   while r < n :
      r *= base
   Ds, Rs = [], {}
   while r not in Rs:
      Rs[r] = len(Ds)
      d,r = divmod(r,n)
      r *= base
      Ds.append(d)
   return len(Ds)-Rs[r], Ds

n = 157
while getDigits(n)[0] != 156:
   n += 1

print(n)

Posté par
dpi
re : Développement décimal périodique 15-03-19 à 11:22

Je savais bien

Posté par
LittleFox
re : Développement décimal périodique 15-03-19 à 17:52

dpi @ 15-03-2019 à 11:22

Je savais bien


Pas pu m'empêcher

Posté par
derny
re : Développement décimal périodique 15-03-19 à 19:24

Bonsoir
Il me semble que :
Longueur période de la forme (n-1)n avec n premier > 5, on a 1/n² comme première solution.
(à vérifier dans tous les cas)

Posté par
LittleFox
re : Développement décimal périodique 16-03-19 à 01:03

@derny
Pas toujours, ça dépend de la base utilisée. Par exemple avec la base 10 et la période 156=12x13 on a 1/3121 comme première solution et pas 169 comme pour la base 2.



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !