http://projecteuler.net/index.php?section=problems&id=48
多倍長整数を使うと簡単すぎるので、64ビット整数を使って、5桁で区切って掛け算を行いました。
let N = 1000 let L = 100000L let M = L * L let rec pow (n : int) e = if e = 0 then 1L else let m = pow n (e / 2) let m1 = m % L let m2 = m / L let m' = (m1 * m1 + 2L * m1 * m2 * L) % M if e % 2 = 1 then m' * (int64 n) % M else m' printfn "%d" ((List.sum [ for n in 1..N -> pow n n ]) % M)