113 - Power of Cryptography
Time limit: 3.000 seconds
http://poj.org/problem?id=2109
 
 
题意:给出n和p,求出  ,但是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
 
                   
                   
                   
                   
                            
 
                             本文探讨了在计算机编程竞赛中,如何利用double类型的数据来解决涉及大数幂运算的问题,并进行了详细的误差分析,证明了double类型的可行性。
本文探讨了在计算机编程竞赛中,如何利用double类型的数据来解决涉及大数幂运算的问题,并进行了详细的误差分析,证明了double类型的可行性。
           
       
           
                 
                 
                 
                 
                 
                
               
                 
                 
                 
                 
                
               
                 
                 扫一扫
扫一扫
                     
              
             
                  
 被折叠的  条评论
		 为什么被折叠?
被折叠的  条评论
		 为什么被折叠?
		 
		  到【灌水乐园】发言
到【灌水乐园】发言                                
		 
		 
    
   
    
   
             
            


 
            