Deskripsi tantangan
Untuk setiap bilangan bulat positif nterdapat bilangan yang bentuknya 111...10...000dapat dibagi dengan nbilangan desimal yang dimulai dengan semua 1dan diakhiri dengan semua 0. Ini sangat mudah dibuktikan: jika kita mengambil satu set n+1angka 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 ndan akan memiliki bentuk yang diinginkan. Tujuan Anda adalah menulis program yang menemukan nomor ini.
Deskripsi input
Bilangan bulat positif.
Deskripsi keluaran
Sejumlah pdalam 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..00diperbolehkan.
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
1dan setidaknya satu 0, jika tidak, 0merupakan solusi untuk setiap input. (Akan lebih baik untuk mengklarifikasi ini.)
1harus bekerja.