TZOJ 4839 麦森数(模拟快速幂)
描述
形如2^P-1的素数称为麦森数,这时P一定也是个素数。但反过来不一定,即如果P是个素数,2^P-1不一定也是素数。到1998年底,人们已找到了37个麦森数。最大的一个是P=3021377,它有909526位。麦森数有许多重要应用,它与完全数密切相关。
任务:从文件中输入P(1000<P<3100000),计算2^P-1的位数和最后500位数字(用十进制高精度数表示)
输入
文件中只包含一个整数P(1000<P<3100000)
输出
第一行:十进制高精度数2^P-1的位数。
第2-11行:十进制高精度数2^P-1的最后500位数字。(一行输出,不足500位时高位补0)
不必验证2^P-1与P是否为素数。
样例输入
1279
样例输出
386
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010407932194664399081925240327364085538615262247266704805319112350403608059673360298012239441732324184842421613954281007791383566248323464908139906605677320762924129509389220345773183349661583550472959420547689811211693677147548478866962501384438260291732348885311160828538416585028255604666224831890918801847068222203140521026698435488732958028878050869736186900714720710555703168729087
题意
先输出十进制高精度数2^P-1的位数再输出最后500位
题解
这里求位数我推了好久,其实求位数有个公式:log10(a)*p+1,表示a^p的位数
这里-1不影响总位数,因为2的倍数末尾只可能是2,4,6,8
算500位采用快速幂的思想:2^5==(2^2)^2*2 其中2^2==(2^1)^2
然后模拟一下乘2和平方即可,注意算平方的时候不能越界
代码
1 #include<stdio.h> 2 #include<math.h> 3 #include<string.h> 4 int a[505]; 5 void digui(int x){//快速幂思想 6 if(x/2!=1) 7 digui(x/2); 8 pifang(); 9 if(x%2==1) 10 cheng(); 11 } 12 void cheng(){//乘2 13 int i; 14 for(i=500;i>=1;i--) 15 a[i]*=2; 16 for(i=500;i>=1;i--){ 17 if(a[i]>=10){ 18 a[i-1]+=a[i]/10; 19 a[i]%=10; 20 } 21 } 22 } 23 void pifang(){//平方 24 int i,j,p[505]; 25 memset(p,0,sizeof(p)); 26 for(i=500;i>=1;i--) 27 for(j=500;j>=1;j--) 28 if(i+j-500>=1)//注意这里不能越界 29 p[i+j-500]+=a[i]*a[j]; 30 for(i=500;i>=1;i--){ 31 if(p[i]>=10){ 32 p[i-1]+=p[i]/10; 33 p[i]%=10; 34 } 35 } 36 for(i=1;i<=500;i++) 37 a[i]=p[i]; 38 } 39 40 int main(){ 41 int i,p; 42 memset(a,0,sizeof(a)); 43 scanf("%d",&p); 44 printf("%d\n",(int)(p*log10(2))+1);//直接套公式 45 a[500]=2; 46 digui(p); 47 a[500]--; 48 for(i=1;i<=500;i++) 49 printf("%d",a[i]); 50 puts(""); 51 return 0; 52 }
转载于:https://www.cnblogs.com/taozi1115402474/p/8371574.html
TZOJ 4839 麦森数(模拟快速幂)相关推荐
- [NOIP2003普及组]麦森数(快速幂+高精度)
[NOIP2003普及组]麦森数(快速幂+高精度) Description 形如2^P-1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果P是个素数,2^P-1不一定也是素数.到1998 ...
- 洛谷oj P1045麦森数 高精度快速幂取模及位数求法
题目链接:戳我戳我 我们知道, 的最后一位必定不是0, 则 的位数与 相等. 那么如何来求 的位数呢? 为了不失一般性, 在此直接讨论任意数 的位数: 对于任意大于等于0的实数k, 有 的 ...
- (快速幂算法+高精度)洛谷P1045 麦森数
前言 故事的最后,让我们以一道十分经典的题目--<麦森数>来结尾.接受现实吧,总会有我们没准备过的高精度运算出现.我们固然可以提前把高精度的快速幂模板也准备好,但是总会有百密一疏的时候 ...
- [蓝桥杯][算法训练VIP]麦森数(Java大数+快速幂)
题目描述 形如2p-1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果P是个素数,2p-1不一定也是素数.到1998年底,人们已找到了37个麦森数.最大的一个是P=3021377,它有9 ...
- 【codevs1087NOIP2003】麦森数,高精度+对数+快速幂
麦森数 2003年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 形如2P-1的素数称为麦森数,这时P ...
- Codevs_P1087 麦森数(快速幂+分治)
麦森数(Mason.cpp) [问题描述]形如2P-1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果P是个素数,2P-1不一定也是素数.到1998年底,人们已找到了37个麦森数.最大的 ...
- 蓝桥杯 ALGO-26 算法训练 麦森数
问题描述 形如2P-1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果P是个素数,2P-1不一定也是素数.到1998年底,人们已找到了37个麦森数.最大的一个是P=3021377,它有9 ...
- 【9704】【9109】麦森数
Time Limit: 3 second Memory Limit: 2 MB [问题描述] 形如2p-1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果P是个素数,2p-1不一定也是素 ...
- 高精度:麦森数*(洛谷P1045)
P1045 [NOIP2003 普及组] 麦森数 解析 看似只是正常的一个高精 然而 暗藏杀机 一开始随手那么一写 ... (即使用了快速幂)时间复杂度过于感人 后来我们发现: 第一问位数的计算不必真 ...
- 信息学奥赛一本通 1925:【03NOIP普及组】麦森数 | OpenJudge NOI 4.4 1708:麦森数 | 洛谷 P1045 [NOIP2003 普及组] 麦森数
[题目链接] ybt 1925:[03NOIP普及组]麦森数 OpenJudge NOI 4.4 1708:麦森数 洛谷 P1045 [NOIP2003 普及组] 麦森数 [题目考点] 1. 高精度 ...
最新文章
- htmlparser 获取某a标签地址_HTML常用标签
- android mp4流格式,将RTSP流保存到android中的mp4文件
- 二本本科生连发10篇SCI被喷“灌水严重”?原来是因为......
- Go微服务报错protoc-gen-go: unable to determine Go import path for
- 中石油训练赛 - Fermat‘s Optimization Problem(Java高精度运算+二分)
- 《Spring3.0就这么简单》
- Elasticsearch Reference [6.7] » Modules » Network Settings
- 文件后缀_电脑文件名的后缀即扩展名的显示和隐藏方法
- 【Vegas原创】imp/exp导入导出数据
- 从Android应用程序访问Internet需要什么权限?
- 个人空间html5主页面,2.HTML 教程- (HTML5 简介)
- BZOJ1001 狼抓兔子(网络流转最短路:对偶图)
- pycharm看php文件是乱码,Jetbrains-PhpStorm2019.2中文乱码问题
- 精益创业实战 - 第3章 制作自己的精益画布
- oracle日期型to_char,Oracle 日期函数to_char
- matlab 函数教程,MATLAB函数 - Matlab教程
- 移动端可以查看的设计APP,推荐给大家
- 一本好书,若干能源大数据分析论文分享
- EntityComponentSystemSamples学习笔记
- 制作一个电影推荐系统的案例