- 麦森数
- 2017-09-19 23:13:27 @
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int p;
long long las[300];
int len=1;
double lg2=0.3010299;
void dofor(int k){
int m=1048576;
int tim=k/20;
int lef=k%20;
int m1=1;
for(int i=1;i<=tim;i++)
{
for(int i1=1;i1<=100;i1++)
las[i1]*=m;
for(int i1=1;i1<=100;i1++){
las[i1+1]+=las[i1]/100000;
las[i1]%=100000; }
}
for(int i=1;i<=lef;i++)
m1*=2;
for(int i1=1;i1<=100;i1++)
las[i1]*=m1;
for(int i1=1;i1<=100;i1++){
las[i1+1]+=las[i1]/100000;
las[i1]%=100000; }
return ;
}
void print(){
len=int(lg2*p)+1;
printf("%d\n",len);
las[1]--;
for(int i=9;i>=0;i--)
{
for(int i1=10;i1>=1;i1--)
{
int j=i*10+i1;
if(las[j]==0)
{
printf("00000");
}
else if(las[j]<10000)
{
int a5=las[j];
int ws=0;
while(a5!=0){
a5/=10; ws+=1; }
for(int i=1;i<=5-ws;i++){
printf("0"); }
cout<<las[j];
}
else
{
cout<<las[j];
}
}
printf("\n");
}
return ;
}
int main()
{
cin>>p;
las[1]=1;
dofor(p);
print();
return 0;
}
2 条评论
-
Vinaty-L LV 7 @ 2017-09-19 23:16:56
求大佬纠错
-
2017-09-19 23:16:36@
写的挺麻烦的可是看起来就是一道码农题目
手工的做了一下乘法压缩 O=lenPmax/20/5≈40000000
事实上也并没有超时可是就是wa了一个点
- 1