Bu benim ilk meydan okumam!
Arka fon
Mükemmel sayı pozitif bir tamsayıdır, kendisi hariç tüm bölenlerinin toplamına eşittir.
Öyleyse 6
mükemmel bir sayı 1 + 2 + 3 = 6
.
Öte yandan 12
, çünkü değil 1 + 2 + 3 + 4 + 6 = 16 != 12
.
Görev
Görevin basittir, verilen n
mesajlardan birini basacak bir program yaz :
Ben mükemmel bir numarayım çünkü mükemmel bir numara
d1 + d2 + ... + dm = s == n
değilim çünküd1 + d2 + ... + dm = s [<>] n
Nerede
d1, ... dm
tüm bölenler bazıları n
hariç n
.
s
Tüm bölenlerin toplamıdır d1, ..., dm
(yine, olmadan n
).
[<>]
ya <
(eğer s < n
) ya da >
(eğer s > n
) 'dir.
Örnekler
İçin n
olan 6
"1 + 2 + 3 = 6 == 6, çünkü mükemmel bir sayı değilim":
için n
olan 12
"bir tam sayı değilim 1 + 2 + 3 + 4 + 6 = 16> 12, çünkü,"
için n
bir varlık 13
: "Mükemmel bir numara değilim çünkü 1 = 1 <13"
kurallar
n
dilinizin standartlarından daha büyük değilint
.n
Standart girişten, komut satırı argümanlarından veya bir dosyadan okuyabilirsiniz .- Çıktı mesajı standart çıktıya yazdırılmalıdır ve çıktıda ek karakter görünemez (izleyen boşluk veya satırsonu olabilir)
- Görevi (veya ana bölümünü) sizin için çözecek herhangi bir yerleşik veya kütüphane işlevi kullanamazsınız. Hayır
GetDivisors()
ya da onun gibi bir şey. - Diğer tüm standart boşluklar geçerlidir.
kazanan
Bu kod-golf yani bayt cinsinden en kısa kod kazanır!
=
ve ==
aynı denklemde? Bu hiç mantıklı değil. d1 + d2 + ... + dm = s = n
IMO olmalı .