东大OJ-麦森数
1064: 麦森数
时间限制: 1 Sec 内存限制: 128 MB
提交: 52 解决: 9
[提交][状态][讨论版]
题目描述
输入
文件中只包含一个整数P(1000<P<3100000)
输出
样例输入
1279
样例输出
386 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010407932194664399081925240327364085538615262247266704805319112350403608059673360298012239441732324184842421613954281007791383566248323464908139906605677320762924129509389220345773183349661583550472959420547689811211693677147548478866962501384438260291732348885311160828538416585028255604666224831890918801847068222203140521026698435488732958028878050869736186900714720710555703168729087
#include<stdio.h>
#include<string.h>
#include<math.h>
/*
第一层难点要知道用对数求位数
第二层难点要进行大整数运算
*/
struct num { char a[500]; int size; };
void shl(num &n,int k){
int i;
i = n.size - 1;
if (i + k >= 500)i = 500 - 1 - k;
for (; i >= 0; i--)
n.a[i + k] = n.a[i];
n.size += k;
if (n.size > 500)n.size = 500;
for (i = 0; i < k; i++)n.a[i] = 0;
}
num add(num a, num b){
num c;
memset(&c, 0, sizeof(c));
int i = 0;
if (a.size > b.size)c.size = a.size;
else c.size = b.size;
for (i = 0; i < c.size; i++)
{
c.a[i] += a.a[i] + b.a[i];
c.a[i + 1] += c.a[i] / 10;
c.a[i] %= 10;
}
if (c.a[i] != 0)c.size++;
if (c.size>500)c.size = 500;
return c;
}
num multiply(num a, int b){
num c;
memset(&c, 0, sizeof(c));
if (b == 0)return c;
if (b == 1)return a;
c.size = a.size;
int i;
for (i = 0; i < a.size; i++){
c.a[i] += a.a[i] * b;
c.a[i + 1] += c.a[i] / 10;
c.a[i] %= 10;
}
if (c.a[i] != 0)c.size++;
if (c.size>500)c.size = 500;
return c;
}
num mul(num a, num b){
num c,t;
memset(&c, 0, sizeof(c));
int i;
for (i = 0; i < b.size; i++){
memcpy(&t ,& multiply(a, b.a[i]),sizeof(t));
shl(t, i);
memcpy(&c ,&add(c, t),sizeof(c));
}
return c;
}
num pow(num a, int k){
if (k == 1)return a;
num t;
memcpy(&t ,& pow(a,k / 2),sizeof(t));
if (k % 2 == 1)return mul(mul(t, t), a);
else return mul(t, t);
}
int main(){
freopen("in.txt", "r", stdin);
int p;
scanf("%d", &p);
num a;
memset(&a, 0, sizeof(a));
a.size = 1;
a.a[0] = 2;
memcpy(&a,&pow(a,p),sizeof(a));
int digit = log10((double)2)*p;
printf("%d\n", digit + 1);
int i;
for (i = 0; i < 500; i++)
if (a.a[i] == 0)a.a[i] = 9;
else break;
a.a[i]--;
for (i = 0; i < 500;i++)
printf("%d", a.a[500-1-i]);
return 0;
}
东大OJ-麦森数的更多相关文章
- NOIP200304麦森数
试题描述 形如2P-1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果P是个素数,2P-1不一定也是素数.到1998年底,人们已找到了37个麦森数.最大的一个是P=3021377,它有9 ...
- 【转】[NOIP2003普及组]麦森数
来源:http://vivid.name/tech/mason.html 不得不纪念一下这道题,因为我今天一整天的时间都花到这道题上了.因为这道题,我学会了快速幂,学会了高精度乘高精度,学会了静态查错 ...
- vijosP1223麦森数
vijosP1223麦森数 链接:https://vijos.org/p/1223 [思路] 快速幂+高精乘. 计算2^p-1可以快速幂的方法在O(logn)的时间内出解,限于数据范围我们需要用到高精 ...
- 【高精度乘法】NOIP2003麦森数
题目描述 形如2^{P}-12P−1的素数称为麦森数,这时PP一定也是个素数.但反过来不一定,即如果PP是个素数,2^{P}-12P−1不一定也是素数.到1998年底,人们已找到了37个麦森数.最大的 ...
- 洛谷试炼场-简单数学问题-P1045 麦森数-高精度快速幂
洛谷试炼场-简单数学问题 B--P1045 麦森数 Description 形如2^P−1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果PP是个素数,2^P-1 不一定也是素数.到19 ...
- TZOJ 4839 麦森数(模拟快速幂)
描述 形如2^P-1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果P是个素数,2^P-1不一定也是素数.到1998年底,人们已找到了37个麦森数.最大的一个是P=3021377,它有9 ...
- 洛谷 P1045 麦森数
题目描述 形如2^{P}-1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果P是个素数,2^{P}-1不一定也是素数.到1998年底,人们已找到了37个麦森数.最大的一个是P=30213 ...
- [NOIP2003普及组]麦森数(快速幂+高精度)
[NOIP2003普及组]麦森数(快速幂+高精度) Description 形如2^P-1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果P是个素数,2^P-1不一定也是素数.到1998 ...
- 洛谷P1045 麦森数
题目描述 形如2^{P}-12 P −1的素数称为麦森数,这时PP一定也是个素数.但反过来不一定,即如果PP是个素数,2^{P}-12 P −1不一定也是素数.到1998年底,人们已找 ...
- 麦森数--NOIP2003
题目描述 形如2P−12^{P}-12P−1 的素数称为麦森数,这时PPP 一定也是个素数.但反过来不一定,即如果PPP 是个素数,2P−12^{P}-12P−1 不一定也是素数.到1998年底,人们 ...
随机推荐
- Bootstrap模态框(modal)垂直居中
http://v3.bootcss.com/ 自己也试了改了几种方式也不容乐观,发现在窗口弹出之前是获取不到$(this).height()的值,本想着是用($(window).height()-$( ...
- Java Hello World例子和添加按钮事件与功能
新建android工程,然后默认“下一步”即可完成创建: 2.添加Button 3.在src的MainActivity.java添加以下红色代码 import android.support.v7.a ...
- 怎么找到占用usb的模块,linux下Jlink连接失败
问题是这样产生的,我在linux下安装jlink,启动JLinkExe执行,总是提示不能通过usb连接: SEGGER J-Link Commander V5.10q (Compiled Mar :: ...
- Page Visibility(页面可见性) API介绍、微拓展[转]
一.网页君的悲情谁来懂 唉,突然想到了一首悲情诗: 泪湿罗巾梦不成,夜深前殿按歌声.红颜未老恩先断, 斜倚薰笼坐到明. 学生时代学过的一首诗,已还给老师不知所云的诸位可参见下面释义: 诗的主人公是一位 ...
- WPF之全局快捷键
目录 1.WPF快捷键实现方式 2.全局快捷键设置界面 3.Windows API调用 4.注册全局快捷键 5.快捷键触发 WPF快捷键实现方式 WPF快捷键实现主要有自定义快捷键命令和全局快捷键两种 ...
- 理解 OpenStack Swift (1):OpenStack + 三节点Swift 集群+ HAProxy + UCARP 安装和配置
本系列文章着重学习和研究OpenStack Swift,包括环境搭建.原理.架构.监控和性能等. (1)OpenStack + 三节点Swift 集群+ HAProxy + UCARP 安装和配置 ( ...
- 基于Bootstrap的DropDownList的JQuery组件的完善版
在前文 创建基于Bootstrap的下拉菜单的DropDownList的JQuery插件 中,实现了DropDownList的JQuery组件,但是留有遗憾.就是当下拉菜单出现滚动条的时候,滚动条会覆 ...
- Centos7 更新pip和scipy
更新pip: pip install --upgrade pip 更新scipy包: pip install -upgrade scipy
- JAVA中关于并发的一些理解
一,JAVA线程是如何实现的? 同步,涉及到多线程操作,那在JAVA中线程是如何实现的呢? 操作系统中讲到,线程的实现(线程模型)主要有三种方式: ①使用内核线程实现 ②使用用户线程实现 ③使用用户线 ...
- UESTC 1015 Lweb and pepper --前,后缀最值
题意: n种食物,每种含花椒的概率为Pi,现在已经选择了[L,R]这个区间(下标)的食物,要再选一个,使总的食物只有一种含花椒的概率最大,问选哪个最好,相同的选下标小的. 解法: 就不写解法了.此处有 ...