P1045 麦森数
来源:互联网 发布:ug零件产品编程教程 编辑:程序博客网 时间:2024/06/13 09:11
题目描述
形如的素数称为麦森数,这时一定也是个素数。但反过来不一定,即如果是个素数,不一定也是素数。到1998年底,人们已找到了37个麦森数。最大的一个是,它有909526位。麦森数有许多重要应用,它与完全数密切相关。
任务:从文件中输入(),计算的位数和最后500位数字(用十进制高精度数表示)
输入输出格式
输入格式:
文件中只包含一个整数()
输出格式:
第一行:十进制高精度数的位数。
第2-11行:十进制高精度数的最后500位数字。(每行输出50位,共输出10行,不足500位时高位补0)
不必验证与是否为素数。
输入输出样例
输入样例#1:
1279
输出样例#1:
386
00000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000
00000000000000104079321946643990819252403273640855
38615262247266704805319112350403608059673360298012
23944173232418484242161395428100779138356624832346
49081399066056773207629241295093892203457731833496
61583550472959420547689811211693677147548478866962
50138443826029173234888531116082853841658502825560
46662248318909188018470682222031405210266984354887
32958028878050869736186900714720710555703168729087
高精度乘法问题不大,只要加个快速幂,然后平常写的熟练就行。但是前面的
以下是代码(自己写了一个高精类)
#include <bits/stdc++.h>#pragma GCC optimize(2)using namespace std;struct Bigint{ static const int maxn=1001; short int s[maxn]; int sz; Bigint(){sz=1;memset(s,0,sizeof(s));} Bigint operator =(const int &num){ int x=num; sz=0; do{ s[sz++]=x%10; x/=10; }while(x>0); return *this; } Bigint operator +(Bigint &b){ Bigint c; c.sz=max(sz,b.sz); c.sz=min(c.sz,501); sz=min(sz,501); b.sz=min(b.sz,501); for(int i=0;i<c.sz;i++){ c.s[i]+=s[i]+b.s[i]; c.s[i+1]+=c.s[i]/10; c.s[i]%=10; } if(c.s[c.sz])c.sz++; c.sz=min(c.sz,501); return c; } Bigint operator *(Bigint &b){ Bigint c; c.sz=sz+b.sz-1; c.sz=min(c.sz,501); sz=min(sz,501); b.sz=min(b.sz,501); for(int i=0;i<sz;i++) for(int j=0;j<b.sz;j++){ c.s[i+j]+=s[i]*b.s[j]; c.s[i+j+1]+=c.s[i+j]/10; c.s[i+j]%=10; } if(c.s[c.sz])c.sz++; c.sz=min(c.sz,501); return c; }};ostream& operator <<(ostream& out,const Bigint &x){ for(int i=499,j=0;i>=1;i--,j++){ if(j==50)out<<'\n',j=0; out<<(char)(x.s[i]+'0'); } out<<(char)(x.s[0]-1+'0'); return out;}int n;Bigint num,ans,t;void spow(){ Bigint res,x; res=1,x=2; while(n>0){ if(n&1)res=res*x; x=x*x; n>>=1; } cout<<res<<endl;}int main(){ cin>>n; cout<<(int)(log(2)/log(10)*n+1)<<endl; spow(); return 0;}
- P1045 麦森数
- 洛谷 P1045 麦森数
- 洛谷 P1045 麦森数
- 洛谷 P1045 麦森数
- 洛谷P1045 麦森数
- 数学——洛谷P1045 麦森数
- 快速幂+分治(洛谷P1045 麦森数 noip2003)
- TYVJ P1045 最大的算式
- ZOJ P1045 HDOJ P1056 HangOver
- P1045 Kerry 的电缆网络(Kruskal+并查集)
- 麦森数
- 麦森数
- 麦森数
- 麦森数
- 麦森数
- 麦森数
- 麦森数
- 麦森数
- 搜索专题:问题 E: 挑战ACM迷宫
- ZOJ 3209 Treasure Map (Dancing Links)
- Out of Hay POJ
- PTA-列车调度
- sizeof用法
- P1045 麦森数
- std::async替代std::thread
- 【Nova】nova-consoleauth学习
- K-th number
- Cave Cows 1 洞穴里的牛之一——贪心
- 多态性与虚函数
- dispatch_queue_t翻译
- Android之用Handler实现主线程和子线程互相通信以及子线程和子线程之间的通信
- Github收藏之Android