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
n | 3 | 6 | 7 | 9 | 11 | 13 |
p | 1 | 1 | 6 | 1 | 2 | 6 |
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
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|
.|
.|
.|
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é
Pour aller plus loin on a que si b et n sont premiers entre eux. Donc les n tel que 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, .
Mais en matlab pour des valeurs si petites, je testerais juste les n à partir de 157 en vérifiant que et que
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 si je ne me trompe pas
ça semble correct ; autrement voilà une à deux minutes que mon programme tourne pour trouver le premier 1/n de période 156
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...
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)
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)
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :