比赛 |
刷题ing |
评测结果 |
AAAAAAAAAA |
题目名称 |
麦森数 |
最终得分 |
100 |
用户昵称 |
WangZoB |
运行时间 |
0.032 s |
代码语言 |
C++ |
内存使用 |
0.31 MiB |
提交时间 |
2018-05-29 10:14:33 |
显示代码纯文本
#include<bits/stdc++.h>
#define LL long long
using namespace std;
void mul(int x[],int y[])
{
int ans[505];
memset(ans,0,sizeof(ans));
int lenx = 500;
int leny = 500;
while(x[lenx]==0 && lenx>0)
lenx--;
while(y[leny]==0 && leny>0)
leny--;
for(int i=1;i<=lenx;i++)
{
for(int j=1;j<=leny;j++)
{
if(i+j-1 <= 500)
{
ans[i+j-1] += x[i]*y[j];
}
}
}
for(int i=1;i<=500;i++)
{
ans[i+1] += ans[i]/10;
ans[i] %= 10;
}
for(int i=1;i<=500;i++)
x[i] = ans[i];
}
int main()
{
LL p;
int num=0;
int ans[501]= {0},a[501]= {0},i;
freopen("mason.in","r",stdin);
freopen("mason.out","w",stdout);
scanf("%lld",&p);
num=(int)floor(p*log10(2)+1);
printf("%d\n",num);
ans[1]=1;
a[1]=2;
while(p>0)
{
if(p&1)
mul(ans,a);
p=p>>1;
mul(a,a);
}
ans[1]-=1;
for(i=500; i>0; i--)
{
printf("%d",ans[i]);
if((i-1)%50==0)
printf("\n");
}
printf("\n");
return 0;
}