求助TLE60分

P1045 [NOIP2003 普及组] 麦森数

Rain3721 @ 2025-01-10 17:11:25

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
#define MAX 501
int a[MAX];
int p;
void checkmult(){
    for(int i=0;i<MAX-1;i++){
        if(a[MAX-i-1]>9){
            a[MAX-i-2]+=a[MAX-i-1]/10;
            a[MAX-i-1]%=10;
        }
    }
    a[0]=0;
}
int mult(){
    for(int i=0;i<MAX;i++) a[MAX-i-1]*=2;
    checkmult();
    return 0; 
}
void print(){
    printf("%d\n",(int)(log10(2)*p+1));
    for(int i=9;i>=0;i--){
        for(int k=49;k>=0;k--){
            cout<<a[MAX-i*50-k-1];
        }
        cout<<endl;
    }
}
int main(){
    cin>>p;
    for(int i=0;i<MAX;i++) a[i]=0;
    a[MAX-1]=1;
    for(int i=0;i<p;i++) mult();
    a[MAX-1]--;
    print();
    return 0;
}

|