Project Euler 63
5桁の数 16807 = 7^5は自然数を5乗した数である. 同様に9桁の数 134217728 = 8^9も自然数を9乗した数である.
http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2063
自然数をn乗して得られるn桁の正整数は何個あるか?
#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_set_ui(*ans, 1); for(int i=1 ; i<=n ; i++){ mpz_mul_ui(*ans, *ans, m); } } // mpz_t型の桁数を返す。 int mpz_digit(mpz_t* num){ mpz_t a; mpz_init_set(a, *num); int count = 0; while(mpz_cmp_si(a,0)!=0){ // a = a/10; mpz_div_ui(a, a, 10); count++; } return count; } int main(){ mpz_t a; mpz_init(a); int n, count=0; for(int i=1 ; i<100 ; i++){ for(int j=1 ; j<100 ; j++){ mpowern(&a, i, j); n = mpz_digit(&a); if(n == j) count++; } } cout << count << endl; }
なぜこれが63番という随分後半に配置されているのかわからないほどあっさり。