问题描述
形如2P-1的素数称为麦森数,这时P一定也是个素数。但反过来不一定,即如果P是个素数,2P-1不一定也是素数。到1998年底,人们已找到了37个麦森数。最大的一个是P=3021377,它有909526位。麦森数有许多重要应用,它与完全数密切相关。
任务:从文件中输入P(1000<P<3100000),计算2P-1的位数和最后500位数字(用十进制高精度数表示)
输入格式
文件中只包含一个整数P(1000<P<3100000)
输出格式
第一行:十进制高精度数2P-1的位数。
第2-11行:十进制高精度数2P-1的最后500位数字。(每行输出50位,共输出10行,不足500位时高位补0)
不必验证2P-1与P是否为素数。
样例输入
1279
样例输出
386
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000104079321946643990819252403273640855
38615262247266704805319112350403608059673360298012
23944173232418484242161395428100779138356624832346
49081399066056773207629241295093892203457731833496
61583550472959420547689811211693677147548478866962
50138443826029173234888531116082853841658502825560
46662248318909188018470682222031405210266984354887
32958028878050869736186900714720710555703168729087

分析:1.快速幂二分求2^p,用字符串模拟乘法,注意,每次只保留后505数字即可(全部保留超时)
2.求位数直接公式 log10(2^p)+1 = p*log(2)+1 即可
3.取后500位时,直接在前面先加上500位0,再取后500位,这样可省去判断过程~

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <cmath>
using namespace std;
string mul(string s1, string s2) {if (s1.length() > 505) s1 = s1.substr(s1.length() - 505);if (s2.length() > 505) s1 = s2.substr(s2.length() - 505);vector<int> v(s1.length() + s2.length(), 0);reverse(s1.begin(), s1.end());reverse(s2.begin(), s2.end());for (int i = 0; i < s1.length(); i++) {for (int j = 0; j < s2.length(); j++) {int t = (s1[i] - '0') * (s2[j] - '0') + v[i + j];v[i + j] = t % 10;v[i + j + 1] += t / 10;}}int i;for (i = v.size() - 1; v[i] == 0; i--);string ans(i + 1, '0');for (int j = 0; j <= i; j++)ans[j] = v[i - j] + '0';return ans;}
string f(int p) {if (p == 1) return "2";if (p % 2 == 1) return mul(f(p - 1), "2");string s = f(p / 2);return mul(s, s);
}string cut(string s, int index) {if (s[index] != 0) {s[index] = s[index] - 1;return s;} else {s[index] = '9';return cut(s, index - 1);}
}
int main() {int p;cin >> p;string s = f(p);string ans = cut(s, s.length() - 1);cout << (int) (p * log10(2)) + 1 << endl;string add(500, '0');ans = add + ans;ans = ans.substr(ans.length() - 500);for (int i = 0; i < 500; i++) {cout << ans[i];if ((i + 1) % 50 == 0) cout << endl;}return 0;
}

蓝桥杯 ALGO-26 算法训练 麦森数相关推荐

  1. 蓝桥杯vip答案java_Java实现 蓝桥杯VIP 算法训练 麦森数

    算法训练 麦森数 时间限制:1.0s 内存限制:256.0MB 问题描述 形如2P-1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果P是个素数,2P-1不一定也是素数.到1998年底, ...

  2. 蓝桥杯:试题 算法训练 Remember the A La Mode

    蓝桥杯:试题 算法训练 Remember the A La Mode 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 Hugh Samston经营着一个为今年的ICPC世界总决赛的参 ...

  3. 矩阵乘法 算法训练 试题_蓝桥杯习题集_ 算法训练 矩阵乘法

    原文: 算法训练 矩阵乘法 时间限制:1.0s   内存限制:512.0MB 问题描述 输入两个矩阵,分别是m*s,s*n大小.输出两个矩阵相乘的结果. 输入格式 第一行,空格隔开的三个正整数m,s, ...

  4. 蓝桥杯练习系统算法训练习题加答案java版本

    附上百度文库的链接:http://wenku.baidu.com/view/afb78d36b42acfc789eb172ded630b1c59ee9bf7 转载于:https://www.cnblo ...

  5. java蓝桥杯的题_Java蓝桥杯试题集——算法训练ALGO-116——最大的算式

    题目要求 解题思路 动态规划,今天才弄明白QAQ,借鉴了这位大佬的博客,曹磊的博客 写的很好!但是我觉得我的循环方式更容易理解嘿嘿嘿~ 首先建立如下图的数组,行数代表前几位数,列数代表有几个乘号.将第 ...

  6. 蓝桥杯练习系统—算法训练 s01串

    第一部分:题目 问题描述 s01串初始为"0" 按以下方式变换 0变1,1变01 输入格式 1个整数(0~19) 输出格式 n次变换后s01串 样例输入 3 样例输出 101 数据 ...

  7. 蓝桥杯:试题 算法训练 采油区域 矩阵前缀和+动态规划+分治+枚举

    资源限制 时间限制:2.0s 内存限制:512.0MB 采油区域 Siruseri政府决定将石油资源丰富的Navalur省的土地拍卖给私人承包商以建立油井.被拍卖的整块土地为一个矩形区域,被划分为M× ...

  8. 蓝桥杯-黑色星期五(算法训练)

    题目描述: 有些西方人比较迷信,如果某个月的13号正好是星期五,他们就会觉得不太吉利,用古人的说法,就是"诸事不宜".请你编写一个程序,统计出在某个特定的年份中,出现了多少次既是1 ...

  9. 【算法】【蓝桥杯】试题 算法训练 黑心药商 ALGO-1002

    题目 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 JiaoShou消灭了百变怪,为爱琳世界赢得了和平,但他突然发现自己没有升级,这就意味着必须去喝药补血.爱琳世界的NPC卖的药已 ...

最新文章

  1. 9个技巧让你的PyTorch模型训练变得飞快!
  2. 用Python分析淘宝2000款避孕套,得出这些有趣的结论
  3. python使用matplotlib可视化堆叠的柱状图(stacked bar plot)、多个类别的数据在分类变量层面累积堆叠起来
  4. 超时时间已到。在操作完成之前超时时间已过或服务器未响应
  5. 单片机彩灯移动实验_单片机课程设计彩灯实验.doc
  6. extjs store 复杂json_extjs 2.3 修复 jsonstore 嵌套多级引用数据NULL的BUG
  7. java继承类型转换_#java 一个简单的例子理解java继承、成员函数重写、类型转换...
  8. 在物理内存中观察CLR托管内存及GC行为
  9. java第八章数组上机,上机题目(初级)- 用数组实现记事本(Java)
  10. TensorFlow2实现空间自适应归一化(Spatial Adaptive Normalization, SPADE)
  11. Qt之Ubuntu18.04安装(一)
  12. 一种修复WSL下linux系统问题的方法
  13. JSBinding + SharpKit / JavaScript 加载流程
  14. python遥感数据有偿处理_地质男转行学遥感Python——DMSP数据预处理一
  15. 银行业保险业数字化转型指导意见下发,IT 基础架构团队如何应对挑战?
  16. 2021高校毕业礼物,竞争太激烈了!
  17. PTA 7-18(查找) 新浪微博热门话题(30 分) 30分代码 (已更新)
  18. Ngnix 搭建视频直播服务器
  19. CentOS等保三级安全加固方案
  20. 【机器学习实战】k-近邻算法案例——改进约会网站的配对效果

热门文章

  1. 什么是抽象类?抽象类的作用_Java面试题amp;和amp;amp;的作用和区别
  2. Android:自定义滚动边缘(EdgeEffect)效果
  3. iText关于中文的解决方案
  4. 软件工程实践专题第三次团队作业
  5. 《机器人爱好者(第2辑)》——部署机械手或末端执行器
  6. 切图崽的自我修养-[ES6] 编程风格规范
  7. 375 Inscribed Circles and Isosceles Triangles 等腰三角形 内接圆 圆周率PI表示
  8. cisco交换机MAC/CAW***防范
  9. NIST 按行政令关于加强软件供应链安全的要求,给出“关键软件”的定义及所含11类软件...
  10. 苹果搜索机器人因代理服务器配置不当泄漏内部 IP