题目地址:http://poj.org/problem?id=2109
1 /* 2 题意:k ^ n = p,求k 3 1. double + pow:因为double装得下p,k = pow (p, 1 / n); 4 基础知识: 类型 长度 (bit) 有效数字 绝对值范围 5 float 32 6~7 10^(-37) ~ 10^38 6 double 64 15~16 10^(-307) ~ 10^308 7 long double 128 18~19 10^(-4931) ~ 10 ^ 4932 8 2. 二分查找:和1类似 9 3. 取对数:n*ln(k)=ln(p) ln(k)=ln(p)/n k=exp(ln(p)/n) 10 */ 11 #include <cstdio> 12 #include <iostream> 13 #include <algorithm> 14 #include <cstring> 15 #include <cmath> 16 #include <string> 17 #include <map> 18 #include <queue> 19 #include <vector> 20 using namespace std; 21 22 const int MAXN = 1e6 + 10; 23 const int INF = 0x3f3f3f3f; 24 25 int main(void) //POJ 2109 Power of Cryptography 26 { 27 //freopen ("D.in", "r", stdin); 28 double n, p, k; 29 30 while (~scanf ("%lf%lf", &n, &p)) 31 { 32 printf ("%.0f\n", pow (p, 1 / n)); 33 } 34 35 return 0; 36 } 37 38 /* 39 #include <cstdio> 40 #include <cmath> 41 #include <algorithm> 42 #include <iostream> 43 using namespace std; 44 45 void BinarySearch(int l, int r, double n, double p) 46 { 47 int mid; 48 49 while (l <= r) 50 { 51 mid = l + (r - l) / 2; 52 double tmp = pow (mid, n); 53 if (tmp == p) 54 { 55 printf ("%d\n", mid); return ; 56 } 57 else if (tmp < p) l = mid + 1; 58 else r = mid - 1; 59 } 60 } 61 62 int main(void) 63 { 64 //freopen ("D.in", "r", stdin); 65 66 double n, p; 67 68 while (~scanf ("%lf%lf", &n, &p)) 69 { 70 BinarySearch (1, 1e9, n, p); 71 } 72 73 return 0; 74 } 75 */ 76 77 /* 78 #include <cstdio> 79 #include <cmath> 80 #include <algorithm> 81 #include <iostream> 82 using namespace std; 83 84 int main(void) //POJ 2109 Power of Cryptography 85 { 86 //freopen ("D.in", "r", stdin); 87 88 double n, p; 89 90 while (~scanf ("%lf%lf", &n, &p)) 91 { 92 printf ("%.0f\n", exp (log (p) / n)); 93 } 94 95 return 0; 96 } 97 */