Descripción del desafío
Para cada número entero positivo n
existe un número que tiene la forma de 111...10...000
que es divisible por n
ej. Un número decimal que comienza con todos 1
y termina con todos 0
. Esto es muy fácil de probar: si tomamos un conjunto de n+1
números diferentes en forma de 111...111
(todos 1
), al menos dos de ellos darán el mismo resto después de la división por n
(según el principio del casillero). La diferencia de estos dos números será divisible por n
y tendrá la forma deseada. Su objetivo es escribir un programa que encuentre este número.
Descripción de entrada
Un entero positivo.
Descripción de salida
Un número p
en forma de 111...10...000
tal que p ≡ 0 (mod n)
. Si encuentra más de uno, muestre cualquiera de ellos (no es necesario que sea el más pequeño).
Notas
Su programa tiene que dar la respuesta en un tiempo razonable. Lo que significa que la fuerza bruta no está permitida:
p = 0
while (p != 11..10.00 and p % n != 0)
p++
Tampoco es esto:
do
p = random_int()
while (p != 11..10.00 and p % n != 0)
Iterar a través de los números en forma de 11..10..00
está permitido.
Su programa no necesita manejar una entrada arbitrariamente grande: el límite superior es el límite superior de su idioma.
Resultados de muestra
2: 10
3: 1110
12: 11100
49: 1111111111111111111111111111111111111111110
102: 1111111111111111111111111111111111111111111111110
1
y al menos uno 0
, de lo contrario 0
es una solución para cualquier entrada. (Sería bueno aclarar esto sin embargo.)
1
debería funcionar.