比赛 2020级再出发之二进制拆分及运用 评测结果 AAAAAAAAAA
题目名称 麦森数 最终得分 100
用户昵称 小金 运行时间 0.158 s
代码语言 C++ 内存使用 5.74 MiB
提交时间 2023-07-24 17:33:05
显示代码纯文本
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
int a[1010],ans[1010],m,t=1;
void ch(int c[],int d[])
{
    int e[1010]={};
    for(int i=0;i<=499;i++)
    {
        for(int j=0;j<=499;j++)
        {
            if(i+j<500)
            {
                e[i+j]=e[i+j]+c[i]*d[j];
            }
        }
    }
    for(int i=0;i<=499;i++)
    {
        e[i+1]=e[i+1]+e[i]/10;
        e[i]=e[i]%10; 
    }
    for(int i=0;i<=499;i++)
    {
        c[i]=e[i];
    }
}
int main()
{
    freopen("mason.in","r",stdin);
    freopen("mason.out","w",stdout);
    memset(a,0,sizeof(a));
    memset(ans,0,sizeof(ans));
    a[0]=2;
    ans[0]=1;
    cin>>m;
    cout<<long(m*log10(2))+1<<endl; 
    while(m>0)
    {
        if(m%2==1)
        {
            ch(ans,a);
        }
        ch(a,a);
        m=m/2;
    }
    ans[0]-=1;
    for(int i=499;i>=0;i--)
    {
        cout<<ans[i];
        if(i%50==0)
        {
            cout<<endl;
        }
    }
    return 0;
}