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

México and Central America 2004

你可能感兴趣的:(C++,ACM,uva)