大きい数字の下位10桁を求める。桁溢れとかそんなんで数字があわなくなるので、欲しい桁以上の数字は捨てる。48(1^1+2^2...1000^1000)と97(大きい素数)はこれで解ける。
Problem 48
sum = 0
for i in range(1,1000):
sum += reduce(lambda x,y: x*y%10000000000,[i] * i)
print sum % 10000000000
Problem 97
def fact2():
num = 1
for i in range(7830457):
num = num * 2 % 10000000000
return num
print (1 + 28433 * fact2() ) % 10000000000