贪心 POJ 2109 Power of Cryptography

时间:2023-02-02 15:02:00

 

题目地址: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 */