a^( n+n+1 ) == a*( a^(2n) )
百度百科:快速幂
// 快速幂 ( 递归 )
int fastpow( int a,int n )
{
if( n==0 ) return 1;
if( n==1 ) return a;
int temp=fastpow( a,n>>1 );
return ( ( n&1 )?a:1 )*temp*temp;
}
// 快速幂 ( 位运算 )
int fastpow( int a,int n )
{
if( n==0 ) return 1;
if( n==1 ) return a;
int temp=1;
while( n )
{
if( n&1 ) temp*=a;
a*=a; //
n>>=1;
}
return temp;
}
麦森数
// 大整数快速幂
void fastpow( int p )
{
if( p ) solve( p>>1 );
else return;
int i,j;
for( i=1;i<=MAXN+5;i++ )
{
// i+j<=MAXN+5 i+j==MAXN 时 还不能停下
for( j=1;i+j<=MAXN+5;j++ )
{
if( p&1 ) a[ i+j-1 ]+=b[i]*b[j]*2;
else a[ i+j-1 ]+=b[i]*b[j];
}
}
for( i=1;i<=MAXN;i++ )
{
a[i+1]+=a[i]/10;
b[i]=a[i]%10;
}
memset( a,0,sizeof(a) );
}