Inscription / Connexion Nouveau Sujet
Niveau exercices
Partager :

trouvez N

Posté par
flight
27-12-19 à 17:21

Bonsoir, pas bien dur ...

Soit un entier  N à six chiffres commençant par 1. En deplacant le"1" de la  gauche à l'extrême droite sans changer les autres chiffres de place , on obtient un  nombre égal au triple de N.
Que vaut N ?

Posté par
larrech
re : trouvez N 27-12-19 à 17:56

Bonsoir,

à ma portée, donc.

 Cliquez pour afficher

Posté par
dpi
re : trouvez N 28-12-19 à 09:19

Bonjour,

 Cliquez pour afficher

Posté par
ty59847
re : trouvez N 28-12-19 à 11:51

Même question, mais avec un nombre  de 60 chiffres.

Posté par
Ulmiere
re : trouvez N 28-12-19 à 12:52

\sum_{k=1}^n a_{k-1} 10^k + a_n = \sum_{k=1}^n 3a_k 10^k + 3a_0

Donc 3a_0 = 1 [10], ie a_0 = 7
puis 10a_0+1 = 30a_1 + 21 [100], ie 5 = 3a_1 [100], ie a_1 = 35 [100], donc a_1 = 5
puis 100a_1+10a_0+1 = 300a_2+30a_1+3a_0 [1000], ie 4 = 3a_2 [1000] donc a_2 = 668 [1000], puis a_2 = 8

etc

vous voulez un algo ?

Posté par
ty59847
re : trouvez N 28-12-19 à 13:08

Solution :
142857 142857 142857 142857 142857 142857 142857 142857 142857 142857

142857 est la période de 1/7  ; ce nombre a plein de belles propriétés
14 28 57
14 multiplié par 2, c'est 28, 28 multiplié par 2, c'est 56.. Mais il y a une retenue qui se profile, donc ça devient 57 ; 57 multiplié par 2, c'est 114. On retrouve notre 14 initial, et la retenue ...

Si on multiplie ce nombre 142857 142857 142857 ... 142857 142857 par 3, ça revient à déplacer le 1 initial en le mettant à la fin.
Si on le multiplie par 2, ça revient à déplacer le 14 initial et le mettre à la fin
Si on me multiplie par 4,   idem, en déplaçant 1428
Si on le multiplie par 5, idem en déplaçant 14285
Si on le multiplie par 6, idem en déplaçant 142

Posté par
Ulmiere
re : trouvez N 28-12-19 à 13:13

Et pour l'algo :

import itertools

N = 60
modinv3 = [(6*10**i+3)//9 for i in range(N)]

sol = [7]
for i in range(1,N-1):
	s = 1 + sum(sol[k]*10**(k+1) for k in range(len(sol))) - 3*sum(sol[k]*10**k for k in range(len(sol)))
	s //= 10**len(sol)
	s *= modinv3[i]
	sol.append(int(s%10))
sol.append(1)

z = ''.join(map(str,sol))[::-1]
print z

# verification
print int(z[1:]+'1') == 3*int(z)

Posté par
Ulmiere
re : trouvez N 28-12-19 à 13:17

(c'est la version explicative, très très mal optimisée)

Posté par
mathafou Moderateur
re : trouvez N 28-12-19 à 13:29

Bonjour,

on peut démontrer que c'est la seule solution quel que soit le nombre de chiffres : une répétition de 142857
de sorte que ça n'existe que pour un nombre de chiffres multiple de 6

etc etc
plein d'autres propriétés , par exemple si on supprime la contrainte que 1 soit le premier chiffre, mais qu'on dit :

Soit un entier N à six chiffres commençant par 1. En déplacant le chiffre de gauche à l'extrême droite sans changer les autres chiffres de place , on obtient un nombre égal au triple de à un multiple de N.

et la solution sera encore "presque" la même !!!

plus riche est de déplacer le chiffre de droite pour le mettre à gauche :
par exemple 1034482758620689655172413793 x 3 = 3103448275862068965517241379
(c'est le plus petit "triple tournant", sauf erreurs !!)

et on retrouve notre 142857 comme multiplié par 5 :
5 x 142857 = 714285
(142857 "tourne" quel que soit le nombre < 7 par lequel on le multiplie)

Posté par
flight
re : trouvez N 28-12-19 à 20:18

salut

avec un petit bout de code comme le suggère Ulmière ,  en vba ca donne  

Citation :
Sub prog()
For i = 100000 To 999999
If Val(Mid(i, 2, Len(i)) & "1") = 3 * i Then
   msgbox i  ' retourne la valeur attendue 142857
End If
Next


End Sub



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 !