1 solutions

  • 0
    @ 2024-12-10 23:27:11

    C++ :

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<cmath>
    using namespace std;
    #define MAX 550
    typedef struct
    {
            int a[MAX];
    }bign;
    void cheng(bign &c,bign &a,bign &b)
    {
            memset(c.a,0,sizeof(c.a));//注意清零 
            for(int i=0;i<=499;++i)//高精度乘法 
            {
                    for(int j=0;j<=499;++j)
                    {
                            c.a[i+j]+=a.a[i]*b.a[j];//注意是 += 
                    }
            }
            for(int i=0;i<=499;++i)//处理进位 
            {
                    if(c.a[i]>=10)//注意是 >= 10 
                    {
                            c.a[i+1]+=c.a[i]/10;
                            c.a[i]%=10;
                    }
            }
            c.a[500]=0;//注意 特殊处理 
    }
    int main()
    {
            long long n;
            cin>>n;
            cout<<floor(n*log10(2)+1)<<endl;
            bign z[MAX]={{1},{2}},sum={{1}},t;
            int m=(int)(log(n)/log(2))+3;//用递归求快速幂 
            for(int i=2;i<=m;++i)
            {
                    cheng(z[i],z[i-1],z[i-1]);
            }
            int js=0;//计数器  
            while(n>0)
            {
                    if(n%2==1)
                    {
                            t=sum;
                            cheng(sum,t,z[js+1]); 
                    }
                    n/=2;
                    js++;
            } 
            sum.a[0]--;//注意!!麦森数 是2^n-1 
            for(int i=499;i>=0;--i)
            {
                    if((i+1)%50==0&&(i+1)!=500) cout<<endl;
                    cout<<sum.a[i];
            } 
            return 0;
    }
    
    • 1

    Information

    ID
    607
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By