Description du défi
Pour chaque entier positif, n
il existe un nombre dont la forme 111...10...000
est divisible par, n
c'est- à- dire un nombre décimal qui commence par tous 1
et se termine par tous 0
. Ceci est très facile à prouver: si nous prenons un ensemble de n+1
nombres différents sous la forme de 111...111
(tous 1
), alors au moins deux d'entre eux donneront le même reste après division par n
(selon le principe du pigeonhole). La différence de ces deux nombres sera divisible par n
et aura la forme souhaitée. Votre objectif est d'écrire un programme qui trouve ce numéro.
Description d'entrée
Un entier positif.
Description de la sortie
Un nombre p
sous la forme de 111...10...000
, tel que p ≡ 0 (mod n)
. Si vous en trouvez plusieurs, affichez-en un (il n'est pas nécessaire que ce soit le plus petit).
Remarques
Votre programme doit donner la réponse dans un délai raisonnable. Ce qui signifie que le forçage brutal n'est pas autorisé:
p = 0
while (p != 11..10.00 and p % n != 0)
p++
Ce n'est pas non plus:
do
p = random_int()
while (p != 11..10.00 and p % n != 0)
L'itération à travers les nombres sous forme de 11..10..00
est autorisée.
Votre programme n'a pas besoin de gérer une entrée arbitrairement grande - la limite supérieure correspond à la limite supérieure de votre langue.
Exemples de sorties
2: 10
3: 1110
12: 11100
49: 1111111111111111111111111111111111111111110
102: 1111111111111111111111111111111111111111111111110
1
et au moins un 0
, sinon 0
c'est une solution pour n'importe quelle entrée. (Ce serait bien de clarifier cela cependant.)
1
devrait fonctionner.