本文主要是介绍UVa 113 / POJ 2109 Power of Cryptography (使用double处理大整数泰勒公式与误差分析),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
113 - Power of Cryptography
Time limit: 3.000 seconds
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=99&page=show_problem&problem=49
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
这篇关于UVa 113 / POJ 2109 Power of Cryptography (使用double处理大整数泰勒公式与误差分析)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!