Herausforderungsbeschreibung
Für jede positive ganze Zahl ngibt es eine Zahl, deren Form 111...10...000durch neine Dezimalzahl teilbar ist , die mit allen beginnt und mit allen 1endet 0. Dies ist sehr einfach zu beweisen: Wenn wir eine Reihe n+1verschiedener 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 nund 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 pin 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..00ist 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
1mindestens eine enthalten 0, sonst 0ist eine Lösung für jede Eingabe. (Wäre aber gut, dies zu klären.)
1sollte funktionieren.