acwing 876 快速冪求逆元

2022-09-24 04:39:07 字數 1278 閱讀 5324

給定 nn 組 ai,pi其中 pi是質數,求 ai 模 pi 的乘法逆元,若逆元不存在則輸出impossible

注意:請返回在 0∼p−1 之間的逆元。

乘法逆元的定義若整數 b,mb,m 互質,並且對於任意的整數 aa,如果滿足 b|ab|a,則存在乙個整數 xx,使得 a/b≡a×x(modm)a/b≡a×x(modm),則稱 xx 為 bb 的模 mm 乘法逆元,記為 b−1(modm)b−1(modm)。

bb 存在乘法逆元的充要條件是 bb 與模數 mm 互質。當模數 mm 為質數時,bm−2bm−2 即為 bb 的乘法逆元。

輸入格式

第一行包含整數 n。

接下來 n 行,每行包含乙個陣列 ai,pi資料保證 pipi 是質數。

輸出格式

輸出共 n 行,每組資料輸出乙個結果,每個結果佔一行。

若 ai 模 pi的乘法逆元存在,則輸出乙個整數,表示逆元,否則輸出impossible

資料範圍

1≤n≤105

1≤ai,pi≤2∗109

輸入樣例:

3

4 38 5

6 3

輸出樣例:
1

2impossible

分析

若整數bm互質,並且對於任意的整數a,如果滿足b|a,則存在乙個整數x,使得a / b ≡ a * x (% m),則稱xb的模m乘法逆元,記為 \(b^(\% m)\)

根據費馬小定理:\(b^ ≡ 1 (\% m)\),

所以有\(b*b^ ≡ 1 (\% m)\)

又因為b存在乘法逆元的充要條件為b,m互質,所以當m為質數的時候,b的逆元就是\(b^\%m\)

**

#include#include#includeusing namespace std;

typedef long long ll;

ll ksm(int a, int b, int p)

return res;

}int main()

return 0;

}

時間複雜度

參考文章

快速冪求逆元

概念 得到 給定nn組ai,piai,pi,其中pipi是質數,求aiai模pipi的乘法逆元,若逆元不存在則輸出impossible。注意 請返回在0 p 10 p 1之間的逆元。乘法逆元的定義 若整數b,mb,m互質,並且對於任意的整數 aa,如果滿足b ab a,則存在乙個整數xx,使得a b...

快速冪求逆元

費馬小定理 在模為 素數 p的情況下,有費馬小定理 a p 1 1 mod p 那麼a p 2 a 1 mod p 也就是說a的逆元為a p 2 而在模 不為素數 p的情況下,有尤拉定理 a phi m 1 mod m a m 同理a 1 a phi m 1 因此逆元x便可以套用快速冪求得了x a ...

演算法 快速冪,快速冪求逆元

基本思想 3 11 11 1011 3 1 3 3 2 9 3 4 81 3 8 6561 3 11 3 9 6561 第一種 當資料範圍m,k,p 10 9 int qmi int m,int k,int p return res 值得一提 k 1 除以2向0取整 詳細可以看狀態壓縮dp 內含位運...