比赛 刷题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;
}