算法常见技巧 -快速幂及其相关应用
创始人
2024-03-16 06:34:31
0

快速幂

题目

快速幂

典型题例:

给定 n 组 aia_iai​, bib_ibi​, pip_ipi​,对于每组数据,求出 aiba_i^baib​ modmodmod pip_ipi​的值。

示例 :

2
3 2 5
4 3 9

思路
在这里插入图片描述

代码:

/*
核心思路:反复平方法
*/#include 
#include using namespace std;typedef long long LL;// a^b % p
int qmi(int a, int b, int p) {int res = 1;while (b) {if (b & 1) res = (LL) res * a % p;b >>= 1;a = (LL) a * a % p;}return res;
}int main() {int n;scanf("%d", &n);while (n --) {int a, b, p;scanf("%d%d%d", &a, &b, &p);printf("%d\n", qmi(a, b, p));}return 0;
}

快速幂求逆元

典型题例:

给定 nnn 组 aia_iai​,pip_ipi​,其中 pip_ipi​ 是质数,求 aia_iai​ 模 pip_ipi​ 的乘法逆元,若逆元不存在则输出 impossible。

逆元定义:若整数 b,m 互质,并且对于任意的整数 a,如果满足 b|a,则存在一个整数 x,使得 a/b≡a×x(modm),
则称 x 为 b 的模 m 乘法逆元,记为 b−1(modm)。b 存在乘法逆元的充要条件是 b 与模数 m 互质。
当模数 m 为质数时,bm−2 即为 b 的乘法逆元。前提n为质数
a / b ≡ a * x (mod n)
两边同乘b可得 a ≡ a * b * x (mod n)
即 1 ≡ b * x (mod n)
同 b * x ≡ 1 (mod n)
由费马小定理可知,当n为质数时
b ^ (n - 1) ≡ 1 (mod n)
拆一个b出来可得 b * b ^ (n - 2) ≡ 1 (mod n)
故当n为质数时,b的乘法逆元 x = b ^ (n - 2)

示例 :

第一行包含整数 n。
接下来 n 行,每行包含一个数组 ai,pi,数据保证 pi 是质数。输出共 n 行,每组数据输出一个结果,每个结果占一行。
若 ai 模 pi 的乘法逆元存在,则输出一个整数,表示逆元,否则输出 impossible。3
4 3
8 5
6 3

思路
核心
当n为质数时,可以用快速幂求逆元:
a / b ≡ a * x (mod n)
两边同乘b可得 a ≡ a * b * x (mod n)
即 1 ≡ b * x (mod n)
同 b * x ≡ 1 (mod n)
由费马小定理可知,当n为质数时
b ^ (n - 1) ≡ 1 (mod n)
拆一个b出来可得 b * b ^ (n - 2) ≡ 1 (mod n)
故当n为质数时,b的乘法逆元 x = b ^ (n - 2)

当n不是质数时,可以用扩展欧几里得算法求逆元:
a有逆元的充要条件是a与p互质,所以gcd(a, p) = 1
假设a的逆元为x,那么有a * x ≡ 1 (mod p)
等价:ax + py = 1
exgcd(a, p, x, y)
代码:

#include 
#include using namespace std;typedef long long LL;int n;int qmi(int a, int b, int p) {int res = 1;while (b) {if (b & 1) res = (LL)res * a % p;b >>= 1;a = (LL) a * a %  p;}return res;
}int main() {cin >> n;while (n --) {int a, p;scanf("%d%d", &a, &p);int ans = qmi(a, p - 2, p);if (a % p == 0) puts("impossible");else printf("%d\n", ans);}return 0;
}

充电站
推荐一个零声学院免费公开课程,个人觉得老师讲得不错,分享给大家:Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,立即学习

相关内容

热门资讯

原创 日... 在当今日益复杂的国际局势中,日本政治的动向脱离不了全球力量对比变化的背景。高市早苗,作为日本新任首相...
中国农业科学院:“十五五”时期... 人民网北京12月26日电 (记者方经纶)据中国农业科学院官网消息,中国农业科学院近日召开2025年成...
国家创业投资引导基金已完成工商... 12月26日,国家发展改革委创新驱动发展中心主任、国家创业投资引导基金有限公司董事长霍福鹏表示,目前...
一男子晚上将石头搬路中间,有车... 新京报记者 赵露 制作 礼牧周 12月25日,有网民发视频称湖南东安一骑电瓶车男子将石头搬到冷东公路...
明年货币政策怎么走?央行释放新... 中国商报(记者 马文博)中国人民银行货币政策委员会2025年第四季度(总第111次)例会于近日召开。...
圣诞大战-杜兰特25分詹姆斯1... 【搜狐体育战报】北京时间12月26日NBA常规赛,客场作战的火箭以119-96击败湖人,湖人遭遇3连...
同村两男子酒后争着买单大打出手... 近日,安徽太和县的王某与李某两名同村邻居一起吃饭,饭后双方均属于醉酒状态,因爱面子争着付饭钱发生拉扯...
原创 法... 我们都知道,历史上各国军队的要求通常非常严格。士兵不仅需要具备高素质,忠诚度也必须极高,而训练的强度...
原创 红... 当今国际局势愈发复杂,俄乌战场的战火依旧纷飞,近期红军城的激烈攻防战中,一则异常动向引发国际关注——...
多里安·芬尼-史密斯助阵火箭圣... 圣诞节总是NBA赛程中备受瞩目的日子,而今年的圣诞大战,休斯顿火箭队和洛杉矶湖人队的对决无疑成为了焦...