Meydan açıklaması
Her pozitif tamsayı için n
, formunu 111...10...000
bölünebilen bir sayı vardır , n
yani hepsiyle başlayan 1
ve hepsiyle biten bir ondalık sayı 0
. Bunu kanıtlamak çok kolaydır: şeklinde bir dizi n+1
farklı sayı alırsak 111...111
(tümü 1
'), o zaman en az ikisi, bölünmeden sonra n
(güvercin deliği ilkesine göre) aynı kalanı verecektir . Bu iki sayının farkı bölünebilir n
ve istenen forma sahip olacaktır. Amacınız bu numarayı bulan bir program yazmak.
Giriş açıklaması
Olumlu bir tamsayı.
Çıktı açıklaması
Bir dizi p
şeklinde 111...10...000
, öyle ki p ≡ 0 (mod n)
. Birden fazla bulursanız - bunlardan herhangi birini görüntüleyin (en küçük olması gerekmez).
notlar
Programınız cevabı makul bir süre içinde vermek zorundadır. Bu, kaba kuvvet uygulamasına izin verilmeyeceği anlamına gelir:
p = 0
while (p != 11..10.00 and p % n != 0)
p++
Bu da:
do
p = random_int()
while (p != 11..10.00 and p % n != 0)
Şeklinde sayıları yineleme 11..10..00
izin verilir.
Programınızın isteğe bağlı olarak büyük bir girdiyi işlemesi gerekmez - üst sınır, dilinizin üst sınırı ne olursa olsun.
Örnek çıktılar
2: 10
3: 1110
12: 11100
49: 1111111111111111111111111111111111111111110
102: 1111111111111111111111111111111111111111111111110
1
ve en az bir tane içermesi gerektiğini düşünüyorum 0
, aksi takdirde 0
herhangi bir girdi için bir çözümdür. (Bunu açıklığa kavuşturmak iyi olurdu.)
1
çalışmalı.