isPerfect n = result
result
= case filter (\k
-> n`
mod`k
== 0) [2..limit
] of (d1:d2:_) -> n == d1*d2
_ -> False
where perfects
= filter isPerfect
[6..] :: [Int]
aXNQZXJmZWN0IDo6IChJbnRlZ3JhbCBhKSA9PiBhIC0+IEJvb2wKaXNQZXJmZWN0IG4gPSByZXN1bHQKICB3aGVyZSBsaW1pdCAgPSBjZWlsaW5nIChzcXJ0IChmcm9tSW50ZWdyYWwgbikpCiAgICAgICAgcmVzdWx0ID0gY2FzZSBmaWx0ZXIgKFxrIC0+IG5gbW9kYGsgPT0gMCkgWzIuLmxpbWl0XSBvZgogICAgICAgICAgKGQxOmQyOl8pIC0+IG4gPT0gZDEqZDIKICAgICAgICAgIFtkMV0gICAgICAtPiBuYGRpdmBkMSAvPSBkMQogICAgICAgICAgXyAgICAgICAgIC0+IEZhbHNlCgptYWluID0gcHJpbnQgKGxlbmd0aCAodGFrZVdoaWxlICg8PTEwMDAwMDApIHBlcmZlY3RzKSkKICB3aGVyZSBwZXJmZWN0cyA9IGZpbHRlciBpc1BlcmZlY3QgWzYuLl0gOjogW0ludF0K