快速幂求逆元 费马小定理

董晓算法:G13 同余式 乘法逆元 费马小定理(通俗易懂)

[AcWing876] 快速幂求逆元

876. 快速幂求逆元 - AcWing题库

题目描述

给定 nai,pi,其中 pi 是质数,求 aipi 的乘法逆元,若逆元不存在则输出 impossible

注意:请返回在 0p1 之间的逆元。

乘法逆元的定义

若整数 bm 互质,并且对于任意的整数 a,如果满足 b|a,则存在一个整数 x,使得 aba×x(modm),则称 xb 的模 m 乘法逆元,记为 b1(modm)

b 存在乘法逆元的充要条件是 b 与模数 m 互质。当模数 m 为质数时,bm2 即为 b 的乘法逆元。

输入格式

第一行包含整数 n

接下来 n 行,每行包含一个数组 ai,pi,数据保证 pi 是质数。

输出格式

输出共 n 行,每组数据输出一个结果,每个结果占一行。

aipi 的乘法逆元存在,则输出一个整数,表示逆元,否则输出 impossible

数据范围

1n105,
1ai,pi2×109

输入样例:

3
4 3
8 5
6 3

输出样例:

1
2
impossible

算法

费马小定理

n 是质数,a 是正整数且与 n 互质,有 an11 (mod n)

an2 mod n 就是 an 的逆。

C++ 代码

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
ll fastPow(int a, int b, int p)
{
auto res = 1ll;
while (b){
if (b & 1) res = res * 1ll * a % p;
a = a * 1ll * a % p;
b >>= 1;
}
return res;
}
int main()
{
int n; cin >> n;
while (n--){
int a, p; cin >> a >> p;
if (a % p) cout << fastPow(a, p - 2, p) << endl;
else cout << "impossible" << endl;
}
return 0;
}
posted @   AKgrid  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示