Descrição do Desafio
Para todo número inteiro positivo n
existe um número que tem a forma de 111...10...000
que é divisível por, n
isto é, um número decimal que começa com todos 1
e termina com todos 0
. É muito fácil provar: se pegarmos um conjunto de n+1
números diferentes na forma de111...111
(todos 1
), pelo menos dois deles fornecerão o mesmo restante após a divisão por n
(conforme o princípio do buraco de pombo). A diferença desses dois números será divisível por n
e terá a forma desejada. Seu objetivo é escrever um programa que encontre esse número.
Descrição da entrada
Um número inteiro positivo.
Descrição da saída
Um número p
na forma de 111...10...000
, de modo quep ≡ 0 (mod n)
. Se você encontrar mais de um - exiba qualquer um deles (não precisa ser o menor).
Notas
Seu programa deve fornecer a resposta em um período de tempo razoável. O que significa que a força bruta não é permitida:
p = 0
while (p != 11..10.00 and p % n != 0)
p++
Nem é isso:
do
p = random_int()
while (p != 11..10.00 and p % n != 0)
A iteração pelos números na forma de 11..10..00
é permitida.
Seu programa não precisa lidar com uma entrada arbitrariamente grande - o limite superior é o limite superior do seu idioma.
Saídas de amostra
2: 10
3: 1110
12: 11100
49: 1111111111111111111111111111111111111111110
102: 1111111111111111111111111111111111111111111111110
1
e pelo menos um 0
, caso contrário, 0
é uma solução para qualquer entrada. (Seria bom esclarecer isso embora.)
1
deve funcionar.