//p3811 【模板】乘法逆元
#includeusing
namespace
std;
inline
void write(long
long
x)
if(x>9) write(x/10
); putchar(x%10+'0'
);}long
long qpow(long
long n,long
long m,long
long
mod)
return ans%mod;
}int
main()
這一道題是洛谷
p3811 【模板】乘法逆元
當然這一道題用費馬小定理還是過不去的
不過可以證明這一做法的正確性
首先我們要保證題目給出的p是質數
所謂費馬小定理就是
a^(p-1) ≡ 1 (mod p)
稍加化簡就可以看出左邊可以化為a*a^(p-2)
把那個單獨的a挪到右邊
所以a^(p-2)=a-1
也就是a^(p-2)就是a在模p意義下的乘法逆元
然而我們可以用快速冪來進行加速
這樣一來算出乙個乘法逆元的時間複雜度就是logn
但是一定要注意 必須p是負數!
上線性篩
//p3811 【模板】乘法逆元
#includeusing
namespace
std;
inline
void write(long
long
x)
if(x>9) write(x/10
); putchar(x%10+'0'
);}long
long qpow(long
long n,long
long m,long
long
mod)
return ans%mod;
}long
long inv[3000005
];int
main()
還有乙個需要注意的地方
就是那個取模運算是很耗時間的
一開始我把**改成線性篩之後
在輸出 就是那個write的括號裡又增加了乙個%p
事實上是沒有必要的
結果就因為這個多餘的取模 y以至於我還是t乙個點,,
所以千萬不要多加太多%取模
乘法逆元 費馬小定理
我實在是太.才明白這個qwq 一 前置知識 定義1 給定正整數m,若用m除兩個整數a和b所得的餘數相同,稱a和b對模m同餘,記作a b mod m 並稱該式子為同余式 否則稱a和b對模m不同餘 二 乘法逆元 若整數b,p互質,並且b a,則存在乙個整數x,使得 a b a x mod p 稱x為b的...
費馬小定理求逆元
求餘的概念 a b p a p b p p a b p a p b p p a b p a p b p p 為什麼要求逆元 對於一些題目,我們必須在中間過程中進行求餘,否則數字太大,電腦存不下,那如果這個算式中出現除法,我們是不是對這個算式就無法計算了呢?這時候就用到了逆元。費馬曾經說過 費馬小定理...
乘法逆元與費馬小定理
乘法逆元 我們知道 a b m a 1 b m 令1 b 等於 h 那麼 h就是b關於m的乘法逆元,其實就是關於m的乙個相反數,b h 1 m 那麼我們如何求乘法逆元呢 擴充套件歐幾里得演算法b h 1 m 可以等價於b x m y 1 那麼我們主需要呼叫歐幾里得演算法求解出來就可以了。int ca...