土下座しながら探索中

主に競技プログラミング

UVa 113 : Power of Cryptography

問題リンク:Power of Cryptography

問題概要:
n,p (p<= 10^101)が与えられる
k^n = p となるような k を求めよ(k <= 10^9)

解法:
pがかなり大きいが、doubleでなんとかなるみたい

k^n = p より k = n√p (つまり、p^(1/n))
または
k^n = p より
log(k)p = n
log p/log k = n
log p = n log k
log p / n = log k
e^(log p / n) = k

としてkを求める

コード:

#include<cstdio>
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;

int main()
{
  double n,p;
  while(cin >> n >> p)
    {
      printf("%0.lf\n",exp(log(p)/n));
      //printf("%0.lf\n",pow(p,1/n));
    }
  return 0;
}