Description du défi
Pour chaque entier positif, nil existe un nombre dont la forme 111...10...000est divisible par, nc'est- à- dire un nombre décimal qui commence par tous 1et se termine par tous 0. Ceci est très facile à prouver: si nous prenons un ensemble de n+1nombres 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 net 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 psous 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..00est 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
1et au moins un 0, sinon 0c'est une solution pour n'importe quelle entrée. (Ce serait bien de clarifier cela cependant.)
1devrait fonctionner.