洛谷 P1045 麦森数
来源:互联网 发布:js获取input file对象 编辑:程序博客网 时间:2024/06/06 14:21
题目
形如2P-1的素数称为麦森数,这时P一定也是个素数。但反过来不一定,即如果P是个素数,2P-1不一定也是素数。到1998年底,人们已找到了37个麦森数。最大的一个是P=3021377,它有909526位。麦森数有许多重要应用,它与完全数密切相关。
任务:从文件中输入P(1000
题解
计算2的p次方,令m=p/2,则有两种情况:如果p是偶数,那么2p=(2m)2,否则有2p=2(2m)2,基于这种思想,则有算法EXPREC的递归算法。
计算完后,输出2p的位数,计算方法
trunc(ln(2)/ln(10)*n)+1
最后输出2p的最后500位
代码
var n,x,y:longint; a,b,c:array[1..500*3]of longint;procedure mul;var i,j,g:longint;begin for i:=1 to 500 do begin g:=0; for j:=1 to 500 do begin c[i+j-1]:=c[i+j-1]+a[i]*a[j]+g; g:=c[i+j-1] div 10; c[i+j-1]:=c[i+j-1] mod 10; end; c[i+j]:=g; end;end;procedure mul2;var s,g,i,j:longint;begin for i:=1 to 500 do begin g:=0; for j:=1 to 500 do begin c[i+j-1]:=c[i+j-1]+a[i]*b[j]+g; g:=c[i+j-1] div 10; c[i+j-1]:=c[i+j-1] mod 10; end; c[i+j]:=g; end;end;procedure exprec(m:longint);begin if m=0 then c[1]:=1 else begin exprec(m div 2); a:=c; fillchar(c,sizeof(c),0); if odd(m) then mul2 else mul; end;end;begin readln(n); b[1]:=2;x:=1; exprec(n); writeln(trunc(ln(2)/ln(10)*n)+1); c[1]:=c[1]-1; for y:=500 downto 1 do begin write(c[y]); if x mod 50=0 then writeln; inc(x); end;end.
1 0
- 洛谷 P1045 麦森数
- 洛谷 P1045 麦森数
- 洛谷 P1045 麦森数
- 洛谷P1045 麦森数
- P1045 麦森数
- 数学——洛谷P1045 麦森数
- 快速幂+分治(洛谷P1045 麦森数 noip2003)
- TYVJ P1045 最大的算式
- ZOJ P1045 HDOJ P1056 HangOver
- P1045 Kerry 的电缆网络(Kruskal+并查集)
- 洛谷1045 麦森数
- 【洛谷 1045】 麦森数
- 麦森数-洛谷 1045
- 洛谷Oj-麦森数-高精度快速幂
- 麦森数
- 麦森数
- 麦森数
- 麦森数
- 数据库和持久化方案
- 读QT5.7源码(四)QMetaMethod 和 QMetaMethodPrivate
- Leetcode刷题记—— 84. Largest Rectangle in Histogram(柱形图中最大矩形面积)
- CS0122号错误是什么
- Android 获取所有联系人(两种方法)
- 洛谷 P1045 麦森数
- HTML5和CSS常用标签
- 安卓-获取全局上下文
- Android studio 引入ButterKnife注解流程
- Android下设置CPU核心数和频率
- 调起手机软键盘点击搜索按键后触发搜索功能
- JavaScript常用笔记
- SQLYog快捷键大全
- Hyperledger Fabric 1.0 安装和使用说明