113 - Power of Cryptography
Time limit: 3.000 seconds
http://poj.org/problem?id=2109
题意:给出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过这一题。
完整代码:
/*UVa: 0.015s*/
/*POJ: 0ms,448KB*/
#include <cstdio>
#include <cmath>
int main()
{
double n, p;
while (~scanf("%lf%lf", &n, &p))
printf("%.0f\n", pow(p, 1 / n));
return 0;
}
Source
México and Central America 2004
标签:误差,Cryptography,Power,double,113,onlinejudge,problem,include From: https://blog.51cto.com/u_5535544/6185320