1高精度的十进制运算推荐.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1高精度的十进制运算推荐

计算s行的状态转移方程 function calc(s:longint):anstype; var i,j,l:longint; temp1,temp2:anstype; { fillchar(f,sizeof(f),0); /*状态转移方程初始化为0*/ for i←1 to m do f[i,i]←map[s,i]*2; /*f[i,i]为s行的第i个元素值*2*/ for l←2 to m do /*枚举区间长度*/ for i←1 to m-l+1 do /*枚举区间首指针*/ { j←i+l-1; /*计算尾指针*/ temp1←(f[i+1,j]+map[s,i])*2; /*取区间首元素*/ temp2←(f[i,j-1]+map[s,j])*2; /*取区间尾元素*/ if temp1≥temp2 /*取两个方案的大者作为该区间的状态转移方程值*/ then f[i,j]←temp1 else f[i,j]←temp2 }; calc←f[1,m]/*返回s行的状态转移方程值*/ }; * 主程序 readln(n,m); /*读矩阵规模*/ for i←1 to n do /*读矩阵元素(存储方式为高精度数组)*/ for j←1 to m do { map[i,j][0]←1;read(map[i,j][1]) }; fillchar(ans,sizeof(ans),0);/*最大得分初始化为0*/ for i←1 to n do ans←ans+calc(i);/*累加n行的状态转移方程值*/ 输出高精度数组ans; * 麦森数 * 使用倍增思想,优化幂运算 首先,看一个简单的例子——已知整数a,计算a17。很显然,一种最简单的方法就是令b=a,然后重复16次进行操作b=b*a。这样,为了得到a17,共进行了16次乘法。 现在考虑另外一种方法,令a0=a,a1=a2,a2=a4,a3=a8,a4=a16,可以看出,ai=ai-12,(1≤i≤4)。于是,得到a0,a1,a2,a3,a4共需要4次乘法。而a17= a*a16=a0*a4, 也就是说,再进行一次乘法就可以得到a17。这样,总共进行5次乘法就算出了a17。 * 已知a,计算an: 将n表示成为二进制形式,并提取出其中的非零位,即n=2(b1)+2(b2)+……+2(bw), (2(i)=2i)不妨设b1b2……bw。例如 n=9,b2=3,b1=0 由于已知a,所以也就知道了a0 ,重复bw次将这个数平方并记录下来,就可以得到(bw+1)个数:a2(0), a2(1) ,a2(2),……,a2(bw); 根据幂运算的法则,可以推出an= a2(b1)+2(b2)+..2(bw), =a2(b1)*a2(b2)*……*a2(bw),而这些数都已经被求出,所以最多再进行(bw+1)次操作就可以得到。 * 算法分析 1、2P-1的位数为 2、采用高精度运算计算和输出2P-1的最后500位数字。设 ans为2p-1对应的高精度数组; 我们将p转换为对应的二进制数Dn…D0,其中Di的权为2i。 = =( )2。将p对应二进制数中值为1的权2i作为2的次幂,组成ans=2P-1的一项( ),显然,后一项为前一项的平方。当前项存储在高精度数组I中,取后500位。 p= ans=2p-1= -1= -1。 我们将p对应二进制数中值为1的每一项连乘起来,每一次的乘积取后500位,最后的乘积ans-1即为2p-1对应的高精度数组。 * 主程序 read(p);/*输入2的乘幂数*/ writeln(trunc(p*ln(2)/ln(10)+1));/*计算和输出2p-1的位数*/ fillchar(l,sizeof(l),0);l[0]←2;/*当前项初始化*/ fillchar(ans,sizeof(ans),0); ans[0]←1;/*乘积项初始化*/ while p0 do/*由低向高位逐位分析p的每一个二进制位*/ { if p mod 2=1 /*若p的当前二进制位为1,则连乘当前项,取乘积的后500位*/ then ans←ans*l;

文档评论(0)

aena45 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档