#include<stdio.h>
#define MOD 1000000009
long long binaryPow(long long);
long long twopowmod(long long);
int main(void){
long long n,i,j,l,ans;
while(1){
scanf("%d",&n);
i=binaryPow(n);//指数部分取余
j=twopowmod(n+1);//二次幂部分取余
l=(2*(n+1)+3)%MOD;//一次部分取余
ans=(i*6-j-l)%MOD;
printf("%d\n\n",ans);
}
return 0;
}
//二分幂法,
//对于a的高次幂(n)求解时,
//如果n为奇数a^n=a*a^(n-1)
//如果n为偶数a^n=a^(n/2)*a^(n/2)
//最终一定会拆成a^0*a^1;(即递归出口)
long long binaryPow(long long n){
if(n==0) return 1;
else if(n&1){//即判断是否为奇数,位运算效率更高
return 2*binaryPow(n-1);
}
else{
long long mul=binaryPow(n/2);
return mul*mul%MOD;
}
}
long long twopowmod(long long n){
long long mul=n%MOD;
return mul*mul%MOD;
}
【二分快速幂】
最新推荐文章于 2024-06-15 23:36:03 发布