Unity 2021.x新建專案提示Enter safe mode/新建專案報錯
阿新 • • 發佈:2022-04-08
定義
如果有\(a x \equiv 1(\bmod b)\),則稱\(x\)為\(a \ mod \ b\)的逆元,記作\(a^{-1}.\)
性質
\[\frac{x}{y} \equiv x \times y^{-1} \quad(\bmod p) \]計算方法
- 擴充套件歐幾里得
限制:
\[gcd(a,b)=1 \]#include <iostream> using namespace std; void Exgcd(int a , int b , int &x , int &y){ if(!b) x = 1 , y = 0; else Exgcd(b , a % b , y , x) , y -= (a / b) * x; } int main(){ int n , p , x , y; ios::sync_with_stdio(false); cin >> n >> p; for(int i = 1; i <= n; i++){ Exgcd(i , p , x , y); while(x < 0) x += p; x %= p; cout << x << endl; } return 0; }
- 快速冪
運用費馬小定理:
若\(p\)為質數,\(a\)為正整數,且\(a,p\)互質,則\(a^{p-1} \equiv 1 \ ( \bmod \ p)\)
由
$ax \equiv 1\ (\bmod\ b)\ \(
且\)\ a^{b-1} \equiv 1\ (\bmod\ b),$
得\(a x \equiv a^{b-1}\ (\bmod\ b),\)
得\(x \equiv a^{b-2}\ (\bmod\ b).\quad\)故可用快速冪求解:
int fpm(ll a, ll b, ll p){ ll ans = 1; a %= p; for(; b; b >>= 1,(a *= a) %= p) if (b & 1) (ans *= a) %= p; return ans; } int main(){ ll x = fpm(a, p - 2, p);//x為a在mod p意義下的逆元 }
-
線性求逆元
用於求一連串數字對於一個相同模數$\ p\ $的逆元
顯然,\(1^{-1} \equiv 1\ (\bmod\ p)\)
設$\ p=k * i+r\ ,(1<r<i<p),\ \(那麼在\)(mod\ p)$意義下有
\[k * i+r \equiv 0 \quad(\bmod\ p) \]兩側同乘\(i^{-1},r^{-1}\)得
\[k * r^{-1}+i^{-1} \equiv 0 \quad(\bmod\ p) \] \[i^{-1} \equiv-k * r^{-1} \quad(\bmod\ p) \] \[i^{-1} \equiv-\left\lfloor\frac{p}{i}\right\rfloor *(p \bmod i)^{-1} \quad(\bmod\ p) \]可以得到遞推程式碼:
inv[1] = 1; for(int i = 2; i < p; ++ i) inv[i] = (p - p / i) * inv[p % i] % p;