#include<cstdio>
#include<cmath>
#include<cstring>
const int N=3e3+10;
int p,n;
int a[N],b[N],c[N];
void mul(int *a,int *b)
{
memset(c,0,sizeof(c));
for(int i=1;i<=500;i++)
for(int j=1;j<=500;j++)
{
c[i+j-1]+=a[i]*b[j];
c[i+j]+=c[i+j-1]/10;
c[i+j-1]%=10;
}
}
void qpow()
{
while(p)
{
if(p&1)mul(a,b),memcpy(a,c,sizeof(c));
p>>=1;mul(b,b);memcpy(b,c,sizeof(c));
}
}
int main()
{
//freopen("out.txt","w",stdout);
scanf("%d",&p);
n=ceil(log10(2)*p);
printf("%d\n",n);
a[1]=1;b[1]=2;
qpow();
a[1]--;
for(int i=500;i;i--)
{
printf("%d",a[i]);
if((i-1)%50==0)puts("");
}
return 0;
}
总结
高精快速幂和普通快速幂没啥区别