Project Euler 48
次の式は、1^1 + 2^2 + 3^3 + ... + 10^10 = 10405071317 である。 では、1^1 + 2^2 + 3^3 + ... + 1000^1000 の最後の10桁を求めよ。
C/C++
#pragma comment(lib,"mpir.lib") #include <iostream> #include <mpir.h> using namespace std; // m^n を mpz_t型で返す。 void mpowern(mpz_t *ans, int m, int n){ mpz_init_set_ui(*ans, 1); for(int i=1 ; i<=n ; i++){ mpz_mul_ui(*ans, *ans, m); } } int main(){ mpz_t num, tmp; mpz_init_set_ui(num, 0); mpz_init_set_ui(tmp, 0); for(int i=1 ; i<=1000 ; i++){ mpowern(&tmp, i, i); mpz_add(num, num, tmp); } mpz_out_str(stdout, 10, num); }
やっとmpirの扱いに慣れてきたのか、5分ぐらいでできました。