#include <cstdio>
#include <cstring>
typedef long long LL;
#define mod 1000000000
#define LENMAX 700
///调试中最大n为16000
int a[LENMAX];
int b[LENMAX];
LL dd[LENMAX<<1];
int c[LENMAX];
void Mul2()
{
memset(dd,0,sizeof(dd));
memcpy(b,a,sizeof(a));
for(int i=0;i<LENMAX-5;i++)
for(int j=0;j<LENMAX-5;j++){
dd[i+j]+=(LL)a[i]*b[j];
if(dd[i+j]>mod){
dd[i+j+1]+=dd[i+j]/mod;
dd[i+j]%=mod;
}
}
for(int i=0;i<LENMAX;i++)
a[i]=dd[i];
}
void Mul1()
{
memset(dd,0,sizeof(dd));
for(int i=0;i<LENMAX-5;i++)
for(int j=0;j<LENMAX-5;j++){
dd[i+j]+=(LL)a[i]*c[j];
if(dd[i+j]>mod){
dd[i+j+1]+=dd[i+j]/mod;
dd[i+j]%=mod;
}
}
for(int i=0;i<LENMAX;i++)
c[i]=dd[i];
}
void quick_Power(int k){
memset(a,0,sizeof(a));
memset(c,0,sizeof(c));
a[0]=2;c[0]=1;
int cnt=0;
while(k)
{
if(k&1) Mul1();
Mul2();
k>>=1;
}
}
void Power(int x)
{
quick_Power(x);
int j;
for(j=LENMAX-10;j>=0;j--)
if(c[j]!=0) break;
printf("%d",c[j]);
for(j--;j>=0;j--)
printf("%09d",c[j]);
printf("\n");
}
int main(){
int n;
while(~scanf("%d",&n))
{
Power(n);
}
return 0;
}
2^n高精度模板(n<=16000)
最新推荐文章于 2021-05-12 15:14:59 发布