快速幂、逆元、扩展欧几里得算法、费马小定理

这篇博客详细介绍了快速幂算法,逆元的概念及其在模运算中的应用,扩展欧几里得算法的原理和代码实现,以及费马小定理在求模逆元中的作用。通过实例和定理解释,帮助读者理解这些重要的数论算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天听了一位大佬讲的课,想把学的内容记下来,有搜了搜相关资料,整理一下。


一、快速幂

什么是快速幂?快速幂就是比通常累乘更快的算底数的n次幂。时间复杂度为 O(log₂N), 而累乘的为O(N)。

  • 引入:假如我们计算a8,如果我们已经计算到了a4这一步,通常是再乘4次a,但是此时平方一次就可以得到答案了啊。计算a32可以一直平方得到答案,但是计算a36就不能光平方了。
  • 原理:想一想,36 = 100100(2), a36 = a4 * a32 。所以,可以先让a一直平方,在平方第二次时,让ans乘以此时的a (ans 开始为 1),然后a继续平方。当a平方第五次时,再让ans乘以a,此时,ans = ans * a32,就得到a36了。发现,ans要乘a的时机取决于幂的次数以二进制表示时,1的位置。
  • 算法:每平方一次,让幂次的二进制右移一位。a每次平方(a *= a)前先判断(b & 1 == 1),满足则对ans进行一次乘法,ans *= a。
  • 代码:
//循环式
#define ll long long 
ll pow_1(ll a, ll b, ll p)//计算a^b%p
{
   
	ll ans = 1;
	while(b)
	{
   
		if(b & 1)	ans = ans * a % p;	
		a = a *
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值