Deskripsi tantangan
Untuk setiap bilangan bulat positif n
terdapat bilangan yang bentuknya 111...10...000
dapat dibagi dengan n
bilangan desimal yang dimulai dengan semua 1
dan diakhiri dengan semua 0
. Ini sangat mudah dibuktikan: jika kita mengambil satu set n+1
angka yang berbeda dalam bentuk 111...111
(semuanya 1
), maka setidaknya dua dari mereka akan memberikan sisa yang sama setelah pembagian dengan n
(sesuai prinsip pigeonhole). Perbedaan dari dua angka ini akan habis dibagi n
dan akan memiliki bentuk yang diinginkan. Tujuan Anda adalah menulis program yang menemukan nomor ini.
Deskripsi input
Bilangan bulat positif.
Deskripsi keluaran
Sejumlah p
dalam bentuk 111...10...000
, sedemikian rupa p ≡ 0 (mod n)
. Jika Anda menemukan lebih dari satu - tampilkan salah satunya (tidak perlu yang terkecil).
Catatan
Program Anda harus memberikan jawaban dalam jumlah waktu yang wajar. Yang berarti pemaksaan kasar tidak diizinkan:
p = 0
while (p != 11..10.00 and p % n != 0)
p++
Tidak juga ini:
do
p = random_int()
while (p != 11..10.00 and p % n != 0)
Iterasi melalui angka-angka dalam bentuk 11..10..00
diperbolehkan.
Program Anda tidak perlu menangani input besar sembarang - batas atas adalah apa pun batas atas bahasa Anda.
Output sampel
2: 10
3: 1110
12: 11100
49: 1111111111111111111111111111111111111111110
102: 1111111111111111111111111111111111111111111111110
1
dan setidaknya satu 0
, jika tidak, 0
merupakan solusi untuk setiap input. (Akan lebih baik untuk mengklarifikasi ini.)
1
harus bekerja.