/* Euler #48 in Picat. Problem 48 """ The series, 1^(1) + 2^(2) + 3^(3) + ... + 10^(10) = 10405071317. Find the last ten digits of the series, 1^(1) + 2^(2) + 3^(3) + ... + 1000^(1000). """ This Picat model was created by Hakan Kjellerstrand, hakank@gmail.com See also my Picat page: http://www.hakank.org/picat/ */ main => go. go => time(euler48). % 0.4s euler48 => Sum = 0, T = 10000000000, foreach(I in 1..1000) N = I, foreach(_J in 2..I) N := (N * I) mod T end, Sum := (Sum + N) mod T end, println(Sum). % 2.9s euler48b => S = 1, foreach(I in 2..1000) S := S + I**I end, SS := S.to_string(), Len = SS.length, println([SS[J] : J in Len-9..Len]). % This is slightly slower: 3.0s euler48c => S = sum([I**I : I in 1..1000]).to_string(), Len = S.length, println([S[J] : J in Len-9..Len]).