Project Euler Problem 48: Self powers
Problem 48
The series, 11 + 22 + 33 + ... + 1010 = 10405071317.
Find the last ten digits of the series, 11 + 22 + 33 + ... + 10001000.
C++:
#include <iostream> using namespace std; typedef unsigned long long ULL; const ULL DIGITS10 = 10000000000; // 模幂函数 ULL powermod(__uint128_t a, int n, ULL m) { __uint128_t res = 1L; while(n) { if(n & 1L) { res *= a; res %= m; } a *= a; a %= m; n >>= 1; } return (ULL)res; } int main() { long n; ULL ans; while(cin >> n) { ans = 0; for(int i=1; i<=n; i++) { ans += powermod(i, i, DIGITS10); ans %= DIGITS10; } cout << ans << endl; } return 0; }
Python:
print(sum([(x**x)%(10**10) for x in range(1,1001)])%(10**10))