模意義下的除法變乘法

2022-05-26 19:12:08 字數 884 閱讀 4275

大家都知道,四則運算中只有除法不支援模運算。

因此,如果在需要取模(特別是統計方案之類的題目),帶除法的公式會十分難處理。

本文介紹一種在模意義將除法換成乘法的方法。

$} \equiv 1 (mod \space b)$

$\varphi$表示尤拉函式

現假設你要計算$a / b \space(mod \space c)$ 

可將其變形為$a * \space(mod \space c)$

因為$b^ \equiv 1 (mod \space c)$

所以$b^ \equiv (mod \space c)$

代回$a * \space(mod \space c)$

得$a*b^ (mod \space c)$

解決!關於尤拉函式的計算,如果c為素數,則原式直接等於$a*b^ (mod \space c)$ (尤拉函式的定義)

否則可以$o(n)$求出

$c^n_m=n!/(n-m)!/m!$

這樣我們只需要計算$n!, \space ,\space $即可

也就是$n!,  ((n-m)!)^, (m!)^$

可以$o(n)$求出

**

int fac[n];//i的階乘

int ifac[n];//i的階乘的倒數(模mod意義下)

for(int i=1;i<=n;i++) fac[i]=fac[i-1]*i%mod;

ifac[n]=pow(fac[n],mod-2);

for(int i=n-1;i>=0;i--) ifac[i]=ifac[i+1]*(i+1)%mod;

最後一行解釋

$ifac[i]=(i!)^=(i!)^*((i+1)!)^=((i+1)!)^*(i+1)$

JS的乘法,除法,取模,加法,減法運算

一 乘法運算 如果運算數都是數字,執行常規的乘法運算。如果結果太大或太小,那麼生成的結果就是infinity 或 infinity 1 如果某個運算數是nan 結果為 nan 2 infinity乘以 0,結果為 nan 3 infinity乘以 0以外的數字,結果為 infinity 或 infi...

負數除法的意義

今天無意中看到小朋友做負數的除法,突然覺得自己對負數及負數的除法的意義並不清楚,這幾年書真是白讀了,所以寫下此文章。首先要明白負數中 負號 的意義,負號 的意義在於 方向 例如 我們定義 給我 為 給你 為 那麼下列除法用語言描述就是 12 3 4,給我12個蘋果 12 每次給我3個 3 需要4次 ...

大數運算,佇列實現大數 加法 乘法 除法 模除

以下 可進行大數加法 減法 乘法 除法 餘除,和比較大小的計算 佇列實現 包括負數 include include include include include includeusing namespace std const int mod 1e9 typedef long long ll co...