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))