【二分快速幂】

#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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值