Herausforderungsbeschreibung
Für jede positive ganze Zahl n
gibt es eine Zahl, deren Form 111...10...000
durch n
eine Dezimalzahl teilbar ist , die mit allen beginnt und mit allen 1
endet 0
. Dies ist sehr einfach zu beweisen: Wenn wir eine Reihe n+1
verschiedener Zahlen in Form von 111...111
(allen 1
) nehmen, geben mindestens zwei von ihnen den gleichen Rest nach der Division durch n
(nach dem Taubenprinzip). Die Differenz dieser beiden Zahlen ist teilbar durch n
und hat die gewünschte Form. Ihr Ziel ist es, ein Programm zu schreiben, das diese Nummer findet.
Eingabebeschreibung
Eine positive ganze Zahl.
Ausgabebeschreibung
Eine Zahl p
in Form von 111...10...000
, so dass p ≡ 0 (mod n)
. Wenn Sie mehr als eine finden - zeigen Sie eine davon an (muss nicht die kleinste sein).
Anmerkungen
Ihr Programm muss die Antwort innerhalb eines angemessenen Zeitraums geben. Was bedeutet, dass Brute-Forcing nicht erlaubt ist:
p = 0
while (p != 11..10.00 and p % n != 0)
p++
Weder ist dies:
do
p = random_int()
while (p != 11..10.00 and p % n != 0)
Das Durchlaufen der Zahlen in Form von 11..10..00
ist erlaubt.
Ihr Programm muss keine willkürlich großen Eingaben verarbeiten - die Obergrenze ist die Obergrenze Ihrer Sprache.
Beispielausgaben
2: 10
3: 1110
12: 11100
49: 1111111111111111111111111111111111111111110
102: 1111111111111111111111111111111111111111111111110
1
mindestens eine enthalten 0
, sonst 0
ist eine Lösung für jede Eingabe. (Wäre aber gut, dies zu klären.)
1
sollte funktionieren.