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)