Mô tả thử thách
Đối với mỗi số nguyên dương ntồn tại một số có dạng 111...10...000chia hết cho nsố đó là số thập phân bắt đầu bằng tất cả 1và kết thúc bằng tất cả 0. Điều này rất dễ chứng minh: nếu chúng ta lấy một tập hợp n+1các số khác nhau dưới dạng 111...111(tất cả 1), thì ít nhất hai trong số chúng sẽ cho cùng một phần còn lại sau khi chia theo n(theo nguyên tắc pigeonhole). Sự khác biệt của hai số này sẽ chia hết cho nvà sẽ có dạng mong muốn. Mục đích của bạn là viết một chương trình tìm thấy số này.
Mô tả đầu vào
Một số nguyên dương.
Mô tả đầu ra
Một số pở dạng 111...10...000, như vậy p ≡ 0 (mod n). Nếu bạn tìm thấy nhiều hơn một - hiển thị bất kỳ cái nào trong số chúng (không cần phải là cái nhỏ nhất).
Ghi chú
Chương trình của bạn phải đưa ra câu trả lời trong một khoảng thời gian hợp lý. Điều đó có nghĩa là vũ phu không được phép:
p = 0
while (p != 11..10.00 and p % n != 0)
p++
Đây cũng không phải là:
do
p = random_int()
while (p != 11..10.00 and p % n != 0)
Lặp lại thông qua các số dưới dạng 11..10..00được cho phép.
Chương trình của bạn không cần xử lý đầu vào lớn tùy ý - giới hạn trên là bất cứ điều gì giới hạn trên của ngôn ngữ của bạn.
Đầu ra mẫu
2: 10
3: 1110
12: 11100
49: 1111111111111111111111111111111111111111110
102: 1111111111111111111111111111111111111111111111110
1và ít nhất một 0, nếu không thì 0là một giải pháp cho mọi đầu vào. (Sẽ rất tốt để làm rõ điều này mặc dù.)
1nên làm việc.