快速幂(数论)

题目:
给 定 a , i , n , 求 a i m o d n 给定a,i,n,求 a^i mod \quad n a,i,naimodn
最基本的方法是需要i次乘法和取模运算。因为求模有以下性质:
a m o d n = ( a m o d n ) m o d n a \quad mod\quad n = ( a\quad mod\quad n)mod\quad n amodn=(amodn)modn

较快的算法是通过
a i = { a ∗ a i − 1 i 为 奇 数 ( a b / 2 ) 2 i 为 偶 数 a^i= \begin{cases} a * a^{i-1} & i为奇数 \\ \\ (a^{b/2})^2 & i为偶数 \\ \end{cases} ai=aai1(ab/2)2ii

代码:

typedef long long ll ;
ll pow_mod(ll a, ll i) //快速幂 
{
	if (i == 0) //递归终止条件
		return 1 % mod; 
	ll temp = pow_mod(a, i >> 1); //i>>1 是位运算,相当于i/2
	temp = temp * temp % mod;
	if (i & 1) //是奇数
		temp = (ll)temp * a % mod;
	return temp;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落春只在无意间

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值