洛谷 P1045 麦森数
题目描述
形如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与P是否为素数。
输入输出样例
输入样例#1:
1279
输出样例#1:
386
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000104079321946643990819252403273640855
38615262247266704805319112350403608059673360298012
23944173232418484242161395428100779138356624832346
49081399066056773207629241295093892203457731833496
61583550472959420547689811211693677147548478866962
50138443826029173234888531116082853841658502825560
46662248318909188018470682222031405210266984354887
32958028878050869736186900714720710555703168729087
解题思路:
本题正确解法为高精度加快速幂,怎样求位数呢,公式:log10(2) * p + 1。再想如何求五百位,如果暴力一次次乘的话,会TLE,那么我们想到了快速幂,再加上高精度就AC了,需要注意的是题目只让求后五百位,所以我们每次只保存后五百位就可以了,因为前面无论是多少都不影响答案。
AC代码:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
int p,f[],res[],sav[];
void rr1() {
memset(sav,,sizeof(sav));
for(int i = ;i <= ; i++)
for(int j = ;j <= ; j++)
sav[i+j-] += res[i] * f[j];//每一位都相乘,但是暂时不考虑进位
for(int i = ;i <= ; i++) {//进位
sav[i+] += sav[i] / ;
sav[i] %= ;
}
memcpy(res,sav,sizeof(res));//将sav赋值给res
}
void rr2() {
memset(sav,,sizeof(sav));
for(int i = ;i <= ; i++)
for(int j = ;j <= ; j++)
sav[i+j-] += f[i] * f[j];//每一位都相乘,但是暂时不考虑进位
for(int i = ;i <= ; i++) {//进位
sav[i+] += sav[i] / ;
sav[i] %= ;
}
memcpy(f,sav,sizeof(f));//将sav赋值给f
}
int main() {
scanf("%d",&p);
printf("%d\n",(int)(log10() * p + ));
res[] = ;
f[] = ;//高精度赋初值
while(p != ) {//快速幂过程
if(p % == ) rr1();
p /= ;
rr2();
}
res[] -= ;
for(int i = ;i >= ; i--)
if(i != && i % == ) printf("\n%d",res[i]);//50位就换行
else printf("%d",res[i]);
return ;
}
//NOIP普及 2003 T4
洛谷 P1045 麦森数的更多相关文章
- 洛谷P1045 麦森数
题目描述 形如2^{P}-12 P −1的素数称为麦森数,这时PP一定也是个素数.但反过来不一定,即如果PP是个素数,2^{P}-12 P −1不一定也是素数.到1998年底,人们已找 ...
- NOIP2003 普及组 洛谷P1045 麦森数 (快速幂+高精度)
有两个问题:求位数和求后500位的数. 求位数:最后减去1对答案的位数是不影响的,就是求2p的位数,直接有公式log10(2)*p+1; 求后500位的数:容易想到快速幂和高精度: 1 #includ ...
- 洛谷 P1045 麦森数 (快速幂+高精度+算位数骚操作)
这道题太精彩了! 我一开始想直接一波暴力算,然后叫上去只有50分,50分超时 然后我改成万位制提高运算效率,还是只有50分 然后我丧心病狂开long long用10的10次方作为一位,也就是100亿进 ...
- P1045麦森数
P1045麦森数 #include<iostream> #include <cmath> #include <cstring> const int maxn = 1 ...
- 洛谷试炼场-简单数学问题-P1045 麦森数-高精度快速幂
洛谷试炼场-简单数学问题 B--P1045 麦森数 Description 形如2^P−1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果PP是个素数,2^P-1 不一定也是素数.到19 ...
- 【题解】[P1045] 麦森数
题目 题目描述 形如2^P-1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果P是个素数,2^P-1 不一定也是素数.到1998年底,人们已找到了37个麦森数.最大的一个是P=30213 ...
- P1045 麦森数
别问我为什么要写水题 #include <iostream> #include <cstdio> #include <cstring> #include <a ...
- 【03NOIP普及组】麦森数(信息学奥赛一本通 1925)(洛谷 1045)
[题目描述] 形如2P-1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果P是个素数,2P-1不一定也是素数.到1998年底,人们已找到了37个麦森数.最大的一个是P=3021377,它 ...
- P1045 [NOIP2003 普及组] 麦森数
题目描述 形如2^P−1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果P是个素数,2^P−1不一定也是素数. 到1998年底,人们已找到了37个麦森数.最大的一个是P=3021377, ...
随机推荐
- shit layui & select & re-render & bug
shit layui https://www.layui.com/doc/modules/form.html#onselect https://www.layui.com/doc/element/fo ...
- SPOJ-BRCKTS (括号序列,线段树)
维护括号序列 Replace(i): 将第i个位置的括号反向. Check:测试当前序列是否合法. 题解 将左括号定为1,右括号定为-1,所以只需要满足前缀和序列没有负数即可,即最小值 为正即可,第i ...
- Linux下汇编语言学习笔记7 ---
这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...
- Ajax核心知识(2)
对于Ajax核心的东西需要在进行总结提炼一下: xmlHttp对象. 方法:xml.responseText获取后台传递到前台的数据,经常性的使用var object=xml.responseText ...
- Builder设计模式
Builder模式,又称生成器或构建者模式,属于对象创建型模式,侧重于一步一步的构建复杂对象,只有在构建完成后才会返回生成的对象.Builder模式将一个复杂对象的构建与它的表示分离,使得同样的构建过 ...
- SAS编程基础 - 逻辑库和数据集
1. SAS逻辑库 1.1 创建SAS逻辑库: libname lb 'F:\Data_Model'; libname是关键字,lb是创建的逻辑库的名称,引号内的内容是目录路径,最后一个分号结束程序语 ...
- 程序猿Web面试之JSON
JSON是什么? JSON(JavaScript对象表示法), 是在网络通信下.经常使用的一种数据表达格式,它有助于我们于一个自描写叙述的,独立的和轻的方式呈现并交换数据. 这些数据能够易于和转 ...
- 【面试】iOS 开发面试题(一)
1. #import 跟#include 又什么差别,@class呢, #import<> 跟 #import""又什么差别? 答:#import是Objectiv ...
- PHP + Socket 发送http请求进而实现站点灌水
本质上实现组装http信息的请求行,头信息.主题信息.參考it自学网 cookie信息和http请求头有非常大关系,注意把http请求头信息传递到函数里面 01-msg.php <?php re ...
- Android之——jni通用工具方法
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47002207 1.将java字符串转化为c++字符串 /** *工具方法 *将ja ...