pts90高精度快速幂求助

P1045 [NOIP2003 普及组] 麦森数

LiJoQiao @ 2023-08-15 18:33:54

#include<bits/stdc++.h>
using namespace std;
const int MAXLEN=500+10;
struct bigint
{
    int len,a[MAXLEN];
    bigint(){memset(a,0,sizeof(a));len=1;}
    void print()
    {
        for(int i=9;i>=0;--i)
        {
            for(int j=50;j;--j)
            {
                int tlen=i*50+j;
                cout<<a[tlen];
            }
            cout<<'\n';
        }
    }
}ans2,m2;
bigint fix(bigint a)
{
    while(a.a[a.len+1])++a.len;
    for(int i=1;i<a.len;i++)
    {
        if(a.a[i]<0)
        {
            --a.a[i+1];
            a.a[i]+=10;
        }
        a.a[i+1]+=a.a[i]/10;
        a.a[i]%=10;
    }
    while(a.a[a.len]>=10)
    {
        a.a[a.len+1]+=a.a[a.len]/10;
        a.a[a.len]%=10;
        ++a.len;
    }
    return a;
}
bigint operator*(bigint a,bigint b)
{
    bigint c;
    int alen=min(500,a.len);
    for(int i=1;i<=alen;i++)
    {
        int blen=min(500-i+1,b.len);
        for(int j=1;j<=blen;j++)
        {
            c.a[i+j-1]+=a.a[i]*b.a[j];
        }
    }
    return fix(c);
}
int main()
{
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int P;cin>>P;
    int ans1=log10(2)*P+1;
    cout<<ans1<<'\n';
    m2.a[1]=2;
    ans2.a[1]=1;
    while(P)
    {
        if(P&1)
        {
            ans2=ans2*m2;
        }
        m2=m2*m2;
        P>>=1;
    }
    --ans2.a[1];
    ans2=fix(ans2);
    ans2.print();
    return 0;
}

by LiJoQiao @ 2023-08-15 18:35:36

WA on #2
in:3021377
out:
909526
11913281261611537667213798436049305566736876178255
88332272350690015415089402574152885277835931459133
40309734813994510763562374502553333760767267082261
94805056498068234364270236322187114005959098576373
86600852826717764565800819358859665607143791528714
49648414600032153277107696032667644008966901945306
68310460272117099806449192863428911515984207543022
30411839060484427823257208111447478189918377204959
69880392336860732039112145134495381589829360634296
37539718233655887458210261770225422631973024694271


by LiJoQiao @ 2023-08-15 18:39:18

已过
死因:位数


|