P1045 [NOIP2003 普及组] 麦森数

news2024/11/17 15:32:11

题目描述

形如 2�−12P−1 的素数称为麦森数,这时 �P 一定也是个素数。但反过来不一定,即如果 �P 是个素数,2�−12P−1 不一定也是素数。到 1998 年底,人们已找到了 37 个麦森数。最大的一个是 �=3021377P=3021377,它有 909526 位。麦森数有许多重要应用,它与完全数密切相关。

任务:输入 �(1000<�<3100000)P(1000<P<3100000),计算 2�−12P−1 的位数和最后 500500 位数字(用十进制高精度数表示)

输入格式

文件中只包含一个整数 �(1000<�<3100000)P(1000<P<3100000)

输出格式

第一行:十进制高精度数 2�−12P−1 的位数。

第 2∼112∼11 行:十进制高精度数 2�−12P−1 的最后 500500 位数字。(每行输出 5050 位,共输出 1010 行,不足 500500 位时高位补 00)

不必验证 2�−12P−1 与 �P 是否为素数。

输入输出样例

输入 #1复制

1279

输出 #1复制

386
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000104079321946643990819252403273640855
38615262247266704805319112350403608059673360298012
23944173232418484242161395428100779138356624832346
49081399066056773207629241295093892203457731833496
61583550472959420547689811211693677147548478866962
50138443826029173234888531116082853841658502825560
46662248318909188018470682222031405210266984354887
32958028878050869736186900714720710555703168729087

说明/提示

【题目来源】

NOIP 2003 普及组第四题

这道题可以分为两个模块,第一个模块为求的位数,第二个模块为求的后500位(不足补零)。我们主要来解决第一个模块:

一、求位数

首先我们知道 

 与  有着相同的位数,因为2的次方满足了最后一位不为零的要求,所以减一后位数并不会改变,那么我们可以直接求  的位数。那么怎么求位数呢?我们不妨设  ,根据  的位数为  ,我们只要想办法把  中的底数2改为10,指数加一就是位数了。由此想到用10的几次方来代替2,那么就不难想到  ,这样便可以把  中的2代换掉,变为  。根据乘方的原理,将p乘进去,原式便可化为我们最终想要的形式  了,所以位数就是  。(提醒一下,C++中cmath库自带log10()函数...)

二、求最后500位数

这个绝对难不倒大家,裸的高精快速幂,经过NOIP2017初赛的RP++后,相信很多人都已经会了快速幂了,所以我在这里不再赘述,只是提供一种相对较为简便的高精乘法(见程序)

代码如下:

#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
int f[1001],p,res[1001],sav[1001];//乘法要开两倍长度
void result_1()
{
    memset(sav,0,sizeof(sav));
    for(register int i=1;i<=500;i+=1)
        for(register int j=1;j<=500;j+=1)
            sav[i+j-1]+=res[i]*f[j];//先计算每一位上的值(不进位)
    for(register int i=1;i<=500;i+=1)
    {
        sav[i+1]+=sav[i]/10;//单独处理进位问题,不容易出错
        sav[i]%=10;
    }
    memcpy(res,sav,sizeof(res));//cstring库里的赋值函数,把sav的值赋给res
}
void result_2()//只是在result_1的基础上进行了细微的修改
{
    memset(sav,0,sizeof(sav));
    for(register int i=1;i<=500;i+=1)
        for(register int j=1;j<=500;j+=1)
            sav[i+j-1]+=f[i]*f[j];
    for(register int i=1;i<=500;i+=1)
    {
        sav[i+1]+=sav[i]/10;
        sav[i]%=10;
    }
    memcpy(f,sav,sizeof(f));
}
int main()
{
    scanf("%d",&p);
    printf("%d\n",(int)(log10(2)*p+1));
    res[1]=1;
    f[1]=2;//高精度赋初值
    while(p!=0)//快速幂模板
    {
        if(p%2==1)result_1();
        p/=2;
        result_2();
    }
    res[1]-=1;
    for(register int i=500;i>=1;i-=1)//注意输出格式,50个换一行,第一个不用
        if(i!=500&&i%50==0)printf("\n%d",res[i]);
        else printf("%d",res[i]);
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/463570.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI数字人技术在高中历史课堂上的应用

引言 介绍AI数字人技术的概念和特点介绍AI数字人技术在教育领域的价值和意义提出本文的主题和目的&#xff1a;探讨AI数字人技术在高中历史课堂上的应用 AI数字人技术在高中历史课堂上的应用方式 介绍AI数字人技术可以通过还原历史人物说话视频&#xff0c;利用历史人物籍贯…

HJHD-91晃电保护器 新款35mm卡轨安装 josef约瑟

名称&#xff1a;晃电保护器品牌&#xff1a;JOSEF约瑟型号&#xff1a;HJHD-91额定电压&#xff1a;110、220VAC触点容量&#xff1a;250V/5A动作时间&#xff1a;不大于20ms功率消耗&#xff1a;不大于5W/5VA HJHD系列晃电保护器 HJHD-91晃电保护器 抗晃电继电器 1.特点和用途…

压力测试工具Jmeter入门

文章目录 一、JMeter概述1、JMeter简介2、JMeter的作用 二、JMeter下载三、JMeter测试1.创建线程组2、配置元件3、为线程添加监听器4、查看报告 一、JMeter概述 1、JMeter简介 Apache JMeter 是 Apache 组织基于 Java 开发的压力测试工具&#xff0c;用于对软件做压力测试。 …

Nginx安装删除

1.卸载Nginx ps -ef|grep nginx 查询Nginx 进程pid kill -9 7035 kill -9 7036 查找根下所有名字包含nginx的文件 find / -name nginx 执行命令 rm -rf *删除nignx安装的相关文件 下面开始安装,安装方式很多,可以选择官网下载后拖进linux 官网nginx: download 官网下载…

Mysql-JSON

一、根据JSON字段检索内容 语法: 使用 字段->$.json属性进行查询条件使用json_extract函数查询&#xff0c;json_extract(字段,"$.json属性")根据json数组查询&#xff0c;用JSON_CONTAINS(字段,JSON_OBJECT(json属性, "内容")) 二、检索查询 1.json…

Python之画一朵玫瑰花

效果&#xff1a; 步骤&#xff1a; 导入turtle库和time库设置画布大小和起始位置绘制红色花瓣&#xff0c;使用begin_fill()函数开始填充&#xff0c;fillcolor()函数设置填充颜色&#xff0c;circle()函数绘制圆形&#xff0c;fd()函数绘制直线&#xff0c;left()和right()函…

【Linux】环境变量和进程优先级

目录 环境变量 什么是环境变量 系统结构 系统接口 深度解析 命令行参数 进程优先级 优先级查看 优先级修改 进程间的概念 环境变量 什么是环境变量 &#x1f36e;平时在使用 Linux 的时候&#xff0c;总会使用 ls 、pwd 这类的命令&#xff0c;我们也都知道这些命令…

C语言从入门到精通第14天(C语言预处理)

C语言预处理 预处理概述宏定义条件编译 预处理概述 在前面我们已经对C语言的基础语法知识有所了解了&#xff0c;每次进行程序的编写之前&#xff0c;我们会使用#include命令去导入我们的库函数&#xff0c;而这种以#号开头的命令称为预处理命令。 C语言提供了多种预处理功能…

MATLAB离散时间信号的实现和时域基本运算(九)

1、实验目的&#xff1a; 1&#xff09;了解时域离散信号的特点&#xff1b; 2&#xff09;掌握MATLAB在时域内产生常用离散时间信号的方法&#xff1b; 3&#xff09;熟悉离散时间信号的时域基本运算&#xff1b; 4&#xff09;掌握离散时间信号的绘图命令。 2、实验内容&…

开放原子训练营(第三季)RT-Thread Nano学习营一探究竟

前言 不知道从什么时候起&#xff0c;智能设备开始普及到了我们日常生活的方方面面。下班还未到家&#xff0c;热水器就可以调到合适的温度&#xff1b;上班刚进公司&#xff0c;忘关空调也不再是什么烦恼&#xff1b;诸如夜晚的灯光变换&#xff0c;白昼的窗帘适应等更给我们…

eBPF的发展演进---从石器时代到成为神(二)

3. 发展溯源 回顾技术的发展过程&#xff0c;就像观看非洲大草原日出日落一样&#xff0c;宏大的过程让人感动&#xff0c;细节部分引人深思。每天循环不辍&#xff0c;却又每天不同。 BPF的应用早已超越了它最初的设计&#xff0c;但如果要追溯BPF最初的来源&#xff0c;则必…

nginx(七十一)root、alias、index、try_files关系指令再探

一 root、alias、index、try_files辨析 说明&#xff1a; 这个系列很适合前端人员进阶学习 ① 前言回顾 try_files基础知识 配置try_files实现内容重定向 root和alias指令辨析 ​强调&#xff1a; 1) index只能处理以/结尾的请求2) ​index指令有点在location中判断请…

chatGPT账号apikey码-chatGPT 免费APIKEY

ChatGPT API Key免费吗 ChatGPT使用的API密钥可以免费获取&#xff0c;但是其使用可能会受到一些限制。具体而言&#xff0c;根据你所使用的API提供者和服务级别&#xff0c;免费的API密钥可能会受到以下限制&#xff1a; 次数限制&#xff1a;某些API可能会限制您的API调用次…

Centos 磁盘根目录扩容

Centos磁盘根目录扩容 1.扩容前检查 命令: df -Th or df -h 我们要扩张磁盘空间的就是挂载点为:/ (的这个) 2.添加sda磁盘空间查询磁盘 命令&#xff1a; fdisk -l 其实&#xff0c;我们可以将sda的磁盘新增空间分配给处于sda的 / 挂载目录 也可以跨磁盘将sdb(新磁盘…

约瑟夫环的三种解法(循环链表、数组和用数组模拟链表)

目录 前言 一、用循环链表实现 二、用数组实现 三、用数组模拟链表实现 前言 题目描述&#xff1a; 编号为 1 到 n 的 n 个人围成一圈。从编号为 1 的人开始报数&#xff0c;报到 m 的人离开。 下一个人继续从 1 开始报数。 n-1 轮结束以后&#xff0c;只剩下一个人&am…

dockerfile传参问题和权限问题

dockerfile传参问题和权限问题 一、docker传参 在工作中&#xff0c;使用dockerfile构建镜像的时候&#xff0c;随着业务越来越多&#xff0c;流水线也越来越多&#xff0c;这时候就需要构建一些通用流水线&#xff0c;而通用流水线最大的问题&#xff0c;就是需要传递参数&a…

Linux基础命令和程序部署

Linux基础命令 ls 可以查看当前目录内容ls 后面跟上一个具体路径可以查看指定目录内容ls -l 可以以列表的形式查看&#xff0c;缩写llpwd 查看当前目录的绝对路径cd 切换目录&#xff08;就是window界面的鼠标双击目录进入动作&#xff09;&#xff0c;cd在切换目录时后面可以…

【教学类-34-05】拼图(彩色图片+圆角凹凸拼图)3*4格子(中班主题《个别化拼图》偏美术)

图片展示&#xff1a; 背景需求&#xff1a; 最近班级孩子得了传染病&#xff0c;来了2位孩子。 我觉得&#xff1a;人少的话&#xff0c;孩子们就有充足的时间去拼那些带有凹凸槽的自制彩色图形拼图。 难点&#xff1a; 1、从直线剪切&#xff08;方形拼图&#xff09;转…

Flink Join操作

目录 DataStream API&#xff08;函数编程&#xff09; window Join join coGroup interval Join Table API&#xff08;flink sql) Reguler Join (常规join) inner join left join / right join full join interval join lookup join Window Join INNER/LEFT/RIG…

摄像头录像软件哪款好用?这款就很不错

案例&#xff1a;录屏时怎么录电脑摄像头&#xff1f; 【很多时候我不仅仅需要录制电脑屏幕&#xff0c;还需要在录屏时录入人像&#xff0c;可是我的录屏软件不支持录制人脸。有没有好用的电脑录屏带人脸的屏幕录制工具介绍&#xff1f;】 无论是教学、游戏直播、软件开发、…