#include <bits/stdc++.h>
using namespace std;
int a[1001],b[1001],c[1001];
int p,l,lb;
int c1(){
for(register int i=1;i<=1000;i++) c[i]=0;
for(register int i=1;i<=l;i++)
for(register int j=1;j<=lb;j++){
c[i+j-1]+=a[i]*b[j];
c[i+j]+=c[i+j-1]/10;
c[i+j-1]%=10;
}
int lc=l+lb;
while(c[lc]==0) lc--;
for(register int i=1;i<=lc;i++) a[i]=c[i];
return lc>500?500:lc;
}
int c2(){
for(register int i=1;i<=1000;i++) c[i]=0;
for(register int i=1;i<=lb;i++)
for(register int j=1;j<=lb;j++){
c[i+j-1]+=b[i]*b[j];
c[i+j]+=c[i+j-1]/10;
c[i+j-1]%=10;
}
int lc=lb+lb;
while(c[lc]==0) lc--;
for(register int i=1;i<=lc;i++) b[i]=c[i];
return lc>500?500:lc;
}
int power(){
while(p){
if(p&1)
l=c1();
p>>=1;
lb=c2();
}
}
int main (){
cin>>p;
printf("%d\n",(int)(log10(2)*p+1));
a[1]=1;
b[1]=2;
l=1;
lb=1;
power();
a[1]--;
for(register int i=500;i>=1;i--){
printf("%d",a[i]);
if(!((i-1)%50)) printf("\n");
}
return 0;
}
在本地测试310000没超时
但在洛谷就全超了
TIE记录