Opis wyzwania
Dla każdej dodatniej liczby całkowitej n
istnieje liczba, której postać 111...10...000
jest podzielna przez n
np. Liczbę dziesiętną, która zaczyna się od wszystkich 1
, a kończy na wszystkich 0
. Jest to bardzo łatwe do udowodnienia: jeśli weźmiemy zestaw n+1
różnych liczb w postaci 111...111
(wszystkich 1
), to co najmniej dwie z nich podadzą tę samą resztę po podzieleniu przez n
(zgodnie z zasadą szufladki). Różnica tych dwóch liczb będzie podzielna przez n
i będzie miała pożądaną formę. Twoim celem jest napisanie programu, który znajdzie ten numer.
Opis wejściowy
Dodatnia liczba całkowita.
Opis wyników
Liczba p
w postaci 111...10...000
takiej, że p ≡ 0 (mod n)
. Jeśli znajdziesz więcej niż jeden - wyświetl dowolny z nich (nie musi być najmniejszy).
Uwagi
Twój program musi udzielić odpowiedzi w rozsądnym czasie. Co oznacza, że brutalne wymuszanie jest niedozwolone:
p = 0
while (p != 11..10.00 and p % n != 0)
p++
To też nie jest:
do
p = random_int()
while (p != 11..10.00 and p % n != 0)
Iterowanie po liczbach w postaci 11..10..00
jest dozwolone.
Twój program nie musi obsługiwać dowolnie dużych danych wejściowych - górna granica jest równa górnej granicy twojego języka.
Przykładowe wyniki
2: 10
3: 1110
12: 11100
49: 1111111111111111111111111111111111111111110
102: 1111111111111111111111111111111111111111111111110
1
najmniej jeden 0
, w przeciwnym razie 0
jest to rozwiązanie dla każdego wejścia. (Dobrze by to jednak wyjaśnić.)
1
powinno działać.