题目描述

形如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位数字。(每行输出50位,共输出10行,不足500位时高位补0)

不必验证2^P−1与PP是否为素数。

输入输出样例

输入 #1

1279

输出 #1

386
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000104079321946643990819252403273640855
38615262247266704805319112350403608059673360298012
23944173232418484242161395428100779138356624832346
49081399066056773207629241295093892203457731833496
61583550472959420547689811211693677147548478866962
50138443826029173234888531116082853841658502825560
46662248318909188018470682222031405210266984354887
32958028878050869736186900714720710555703168729087

分析

对于2^p,有

所以

对于10^n,其位数为n+1位,故2^p的位数为

直接输出

其次就是压位高精度

代码

#include <bits/stdc++.h>

#define Enter puts("")
#define Space putchar(' ') using namespace std; typedef long long ll;
typedef double Db;
typedef unsigned long long Ull; inline ll Read()
{
ll Ans = 0;
char Ch = getchar() , Las = ' ';
while(!isdigit(Ch))
{
Las = Ch;
Ch = getchar();
}
while(isdigit(Ch))
{
Ans = (Ans << 3) + (Ans << 1) + Ch - '0';
Ch = getchar();
}
if(Las == '-')
Ans = -Ans;
return Ans;
}
inline void Write(ll x)
{
if(x < 0)
{
x = -x;
putchar('-');
}
if(x >= 10)
Write(x / 10);
putchar(x % 10 + '0');
} int a[100001];
const int Maxn = 100000; int main()
{
int p;
p = Read();
Write((int)(p*log10(2.0)+1));
Enter;
int left = p % 10;
p /= 10;
a[0] = 1;
for(int i = 1; i <=p; i++)
{
for(int j = 0; j <= 100; j++)
a[j] <<= 10;
for(int j = 0; j <= 100; j++)
{
if(a[j] >= Maxn)
{
a[j + 1] += a[j] / Maxn;
a[j] %= Maxn;
}
}
}
for(int i = 1; i <= left; i++)
{
for(int j = 0; j <= 100; j++)
a[j] <<= 1;
for(int j = 0; j <= 100; j++)
{
if(a[j] >= Maxn)
{
a[j + 1] += a[j] / Maxn;
a[j] %= Maxn;
}
}
}
a[0]--;
for(int i = 99; i >= 0; i--)
{
printf("%05d" , a[i]);
if(i % 10 == 0)
Enter;
}
return 0;
}

P1045 [NOIP2003 普及组] 麦森数的更多相关文章

  1. 洛谷 P1045 & [NOIP2003普及组] 麦森数

    题目链接 https://www.luogu.org/problemnew/show/P1045 题目大意 本题目的主要意思就是给定一个p,求2p-1的位数和后500位数. 解题思路 首先看一下数据范 ...

  2. [NOIP2003普及组]麦森数(快速幂+高精度)

    [NOIP2003普及组]麦森数(快速幂+高精度) Description 形如2^P-1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果P是个素数,2^P-1不一定也是素数.到1998 ...

  3. 【转】[NOIP2003普及组]麦森数

    来源:http://vivid.name/tech/mason.html 不得不纪念一下这道题,因为我今天一整天的时间都花到这道题上了.因为这道题,我学会了快速幂,学会了高精度乘高精度,学会了静态查错 ...

  4. 【03NOIP普及组】麦森数(信息学奥赛一本通 1925)(洛谷 1045)

    [题目描述] 形如2P-1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果P是个素数,2P-1不一定也是素数.到1998年底,人们已找到了37个麦森数.最大的一个是P=3021377,它 ...

  5. 洛谷试炼场-简单数学问题-P1045 麦森数-高精度快速幂

    洛谷试炼场-简单数学问题 B--P1045 麦森数 Description 形如2^P−1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果PP是个素数,2^P-1 不一定也是素数.到19 ...

  6. 洛谷 P1045 麦森数

    题目描述 形如2^{P}-1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果P是个素数,2^{P}-1不一定也是素数.到1998年底,人们已找到了37个麦森数.最大的一个是P=30213 ...

  7. P1045麦森数

    P1045麦森数 #include<iostream> #include <cmath> #include <cstring> const int maxn = 1 ...

  8. 【高精度乘法】NOIP2003麦森数

    题目描述 形如2^{P}-12P−1的素数称为麦森数,这时PP一定也是个素数.但反过来不一定,即如果PP是个素数,2^{P}-12P−1不一定也是素数.到1998年底,人们已找到了37个麦森数.最大的 ...

  9. 洛谷P1045 麦森数

    题目描述 形如2^{P}-12 ​P ​​ −1的素数称为麦森数,这时PP一定也是个素数.但反过来不一定,即如果PP是个素数,2^{P}-12 ​P ​​ −1不一定也是素数.到1998年底,人们已找 ...

随机推荐

  1. Win64 驱动内核编程-10.突破WIN7的PatchGuard

    突破WIN7的PatchGuard WIN64 有两个内核保护机制,KPP 和 DSE.KPP 阻止我们 PATCH 内核,DSE 拦截我们加载驱动.当然 KPP 和 DSE 并不是不可战胜的,WIN ...

  2. SpringBoot2.0之@Configuration注解

    SpringBoot2.0之@Configuration注解 本文转载自:https://www.javaman.cn/sb2/springboot-configuration 前面我们介绍了Spri ...

  3. 【maven】IDEA工程右边的maven配置中Plugins有重复的命令

    问题 解决 换一个IDEA的版本,比如2020.02 参考链接 https://ask.csdn.net/questions/1060938 https://bbs.csdn.net/topics/3 ...

  4. Maven关于web.xml中Servlet和Servlet映射的问题

    在配置Servlet时,有两个地方需要配置. 一个是<servlet>,另一个是<servlet-Mapping>,这两个一个是配置Servlet,一个是配置其映射信息. &l ...

  5. VS Code 远程开发

    听说有人想用VS Code实现远程开发,今天他来了 Remote Development Always reveal the SSH login terminal, 还可加装免密登录,一键登录尽显奢华 ...

  6. Django(3)pycharm创建项目

    创建项目 我们创建django项目有两种方式,命令行方式和使用pycharm工具创建,本文就介绍常用的pycharm工具创建   首先点击django,输入项目的名称,选择创建好的虚拟环境,最后点击c ...

  7. 脱壳入门----常见的寻找OEP的方法

    一步直达法 所谓的一步直达法就是利用壳的特征.壳一般在执行完壳代码之后需要跳转到OEP处,而这个跳转指令一般是call ,jmp ,push retn类型的指令,而且因为壳代码所在的区段和OEP代码所 ...

  8. CRM应用中可能发生的问题

    CRM系统是公认的提升企业竞争力的强大工具.它既是以客户为中心的思想,又是一种企业管理方案.当然,它还是一种管理软件.在国外,CRM使企业运营得风生水起,但在我国的企业应用中,还是有着很高的失败率和使 ...

  9. mysql基本命令(增,查,改,删)

    from oldboy egon

  10. 《SystemVerilog验证-测试平台编写指南》学习 - 第3章 过程语句和子程序

    <SystemVerilog验证-测试平台编写指南>学习 - 第3章 过程语句和子程序 3.1 过程语句 3.2 任务.函数以及void函数 3.3 任务和函数概述 3.4 子程序参数 3 ...