-- prime numbers
sieve [] = []
sieve
(x:u
) = x :
(sieve
(filter (\y
-> mod y x
/= 0) u
))
allPrimes = sieve [2..]
divisorsFrom x u@(y:v)
| x == 1 = []
| (mod x y
== 0) = y : divisorsFrom
(div x y
) u
divisors x = divisorsFrom x allPrimes
-- print (divisors 600851475143)
-- print (allPrimes !! 10000)
LS0gcHJpbWUgbnVtYmVycwoKc2lldmUgW10gPSBbXQoKc2lldmUgKHg6dSkgPSB4IDogKHNpZXZlIChmaWx0ZXIgKFx5IC0+IG1vZCB5IHggLz0gMCkgdSkpCgphbGxQcmltZXMgPSBzaWV2ZSBbMi4uXQoKZGl2aXNvcnNGcm9tIHggdUAoeTp2KQoJfCB4ID09IDEJCT0gW10KCXwgKG1vZCB4IHkgPT0gMCkJPSB5IDogZGl2aXNvcnNGcm9tIChkaXYgeCB5KSB1Cgl8IG90aGVyd2lzZQkJPSBkaXZpc29yc0Zyb20geCB2CgpkaXZpc29ycyB4ID0gZGl2aXNvcnNGcm9tIHggYWxsUHJpbWVzCgptYWluID0gZG8gKHByaW50IChzdW0gKHRha2VXaGlsZSAoPDEzMDAwMCkgKHNpZXZlIFsyLi4yMDAwMDAwXSkpKSkKCi0tCXByaW50IChkaXZpc29ycyA2MDA4NTE0NzUxNDMpCi0tCXByaW50IChhbGxQcmltZXMgISEgMTAwMDAp