标签:
Time limit: 3.000 seconds
http://poj.org/problem?id=2109
Time Limit: 1000MS | Memory Limit: 30000K | |
Total Submissions: 19772 | Accepted: 9984 |
Description
Input
Output
Sample Input
2 16 3 27 7 4357186184021382204544
Sample Output
4 3 1234
题意:给出n和p,求出 ,但是p可以很大()
如何存储p?不用大数可不可以?
先看看double行不行:指数范围在-307~308之间(以10为基数),有效数字为15位。
误差分析:
令f(p)=p^(1/n),Δ=f(p+Δp)-f(p)
则由泰勒公式得
(Δp的上界是因为double的精度最多是15位,n有下界是因为 )
由上式知,当Δp最大,n最小的时候误差最大。
根据题目中的范围,带入误差公式得Δ<9.0e-7,说明double完全够用(这从一方面说明有效数字15位还是比较足的(相对于float))
这样就满足题目要求,所以可以用double过这一题。
1 #include<stdio.h> 2 #include<math.h> 3 using namespace std; 4 double n; 5 double p ; 6 7 int main () 8 { 9 // freopen ("a.txt" , "r" , stdin); 10 while (~ scanf ("%lf%lf" , &n , &p)) { 11 printf ("%.0f\n" , pow (p , 1.0 / n)) ; 12 } 13 return 0 ; 14 }
转载:http://blog.csdn.net/synapse7/article/details/11672691
Power of Cryptography(用double的泰勒公式可行分析)
标签:
原文地址:http://www.cnblogs.com/get-an-AC-everyday/p/4298628.html