1. 程式人生 > 其它 >Unity 2021.x新建專案提示Enter safe mode/新建專案報錯

Unity 2021.x新建專案提示Enter safe mode/新建專案報錯

定義

如果有\(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;