Meydan açıklaması
Her pozitif tamsayı için n, formunu 111...10...000bölünebilen bir sayı vardır , nyani hepsiyle başlayan 1ve hepsiyle biten bir ondalık sayı 0. Bunu kanıtlamak çok kolaydır: şeklinde bir dizi n+1farklı 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 nve 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..00izin 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
1ve en az bir tane içermesi gerektiğini düşünüyorum 0, aksi takdirde 0herhangi bir girdi için bir çözümdür. (Bunu açıklığa kavuşturmak iyi olurdu.)
1çalışmalı.