Descrizione della sfida
Per ogni numero intero positivo n
esiste un numero che ha la forma di 111...10...000
quello divisibile per n
un numero decimale che inizia con tutto 1
e finisce con tutto 0
. Questo è molto facile da dimostrare: se prendiamo un insieme di n+1
numeri diversi nella forma di 111...111
(tutti 1
), almeno due di essi forniranno lo stesso resto dopo la divisione per n
(secondo il principio del buco del piccione). La differenza di questi due numeri sarà divisibile per n
e avrà la forma desiderata. Il tuo obiettivo è scrivere un programma che trovi questo numero.
Descrizione dell'input
Un numero intero positivo.
Descrizione dell'output
Un numero p
sotto forma di 111...10...000
, tale che p ≡ 0 (mod n)
. Se ne trovi più di uno, visualizzane uno (non è necessario che sia il più piccolo).
Gli appunti
Il tuo programma deve dare la risposta in un ragionevole lasso di tempo. Ciò significa che la forza bruta non è consentita:
p = 0
while (p != 11..10.00 and p % n != 0)
p++
Né questo è:
do
p = random_int()
while (p != 11..10.00 and p % n != 0)
11..10..00
È consentito scorrere i numeri sotto forma di .
Il tuo programma non ha bisogno di gestire un input arbitrariamente grande - il limite superiore è qualunque sia il limite superiore della tua lingua.
Output di esempio
2: 10
3: 1110
12: 11100
49: 1111111111111111111111111111111111111111110
102: 1111111111111111111111111111111111111111111111110
1
e almeno uno 0
, altrimenti 0
è una soluzione per qualsiasi input. (Sarebbe bello chiarire questo però.)
1
dovrebbe funzionare.