1. 程式人生 > 其它 >學習筆記:數學-GCD與LCM-唯一分解定理(質因數分解)

學習筆記:數學-GCD與LCM-唯一分解定理(質因數分解)

唯一分解定理

(質因數分解) 所有大於 \(1\) 的正整數都可以被唯一表示有限個質數的乘積形式(這個形式又可以叫標準分解式)

\[\displaystyle\forall n\in N^+ ,n\neq1, n=p_1^{\alpha_1}*p_2^{\alpha_2}*\dots*p_n^{\alpha_n} \ ,\mbox{其中 }p_1<p_2<\dots<p_n\mbox{ 且全為質數},\alpha_i\neq0 \]
原理

通過篩法得到一個質數表,挨個挨個除,能整除多少次那這個質數就有多少次冪。列舉質數的範圍應該是\(2\sim \sqrt{n}\)​​​(這個的原因請看推論-因數的合數大小)。這樣把成對的因數除完還有可能剩下一個單獨的質因數,再單獨加到分解的結果中就可以了。
當然資料小的話不用質數表直接挨個列舉也應該不是問題

程式碼

(變數名與公式中的各項保持一致)

int pri[MX];//預處理完成後得到的質數表
int p[MX],a[MX];//p記錄所有質因數的值,a記錄所有質因數的冪,(記錄方式和之前的pri記錄方式一樣)
void PrimeDevide(int num){
    for(int i=1;i<pri[0] && pri[i]*pri[i]<=num;i++){
        if(num%pri[i]==0){//找到因數
            p[++p[0]]=pri[i];
            while(num%pri[i]==0){//將該因數除去並根據迴圈次數統計冪
                a[p[0]]++;
                num/=pri[i];
            }
        }
    }
    if(num!=1){//可能剩下單個質因數
        p[++p[0]]=num;
        a[p[0]]=1;
    }
}

推論

合數的因數大小

\(n\)​​​​​​​ 為合數,則其標準分解式中必滿足 \(\exist \ p\ |\ n,\ p\leq \sqrt{n}\)​​​​​​​​ (這個其實相當於是約數的性質)

理解

因為因數必然是成對存在的嘛,一個小於\(\sqrt n\)​​,一個大於\(\sqrt n\)​​,(假設兩個都小於,那麼這兩個的乘積一定小於 \(n\)​​ ;假設兩個都大於,那麼這兩個的乘積一定大於 \(n\)​​ 。兩個假設都矛盾,原結論得證)所以這個推論其實可以表示為通過確定 \(1\sim \sqrt{n}\) ​​範圍的所有因數就可以找到 \(n\) 所有成對的因數

因數個數公式

通過對標準分解式中各個質因數的組合可以枚舉出所有的因數,而這裡組合的方案數就是因數的個數,它與標準分解式中質因數的指數是滿足乘法原理的:(這裡設因數個數為 \(x\) )

\[x=(\alpha_1+1)*(\alpha_2+1)*\dots*(\alpha_n+1),\mbox{其中 }\alpha_i\mbox{ 是 }p_i\mbox{ 的指數} \]
理解

對於 \(n\) 的每一個因數,都必然也可以用 \(n\) 的標準分解式的形式表示出來,不過有一點不同:\(\alpha_i\)在這裡是可以取到0的(也就是說這個因數不包含\(p_i\)這個質因子)。當我們要通過標準分解式構造因數時,每一個質因子的指數的不同的取法就是 \(0\sim\alpha_i\) 一共 \(\alpha_i+1\) 種,而且每一個質因子取多少次冪是獨立的,那麼總共取出來的方案數也就必然滿足乘法原理,那麼乘起來就好啦

因數和公式

同樣是通過改變標準分解式中質因數的指數來計算的,只不過我們將單純的質數相乘變成了這樣:(這裡設因數和為\(sum\)

\[\begin{align} sum&=(p_1^{\alpha_1}+p_1^{\alpha_1-1}+\dots+1)*(p_2^{\alpha_2}+p_2^{\alpha_2-1}+\dots+1)*\dots*(p_n^{\alpha_n}+p_n^{\alpha_n-1}+\dots+1) \\ &=\frac{p_1^{\alpha_1}-1}{p_1-1}*\frac{p_2^{\alpha_2}-1}{p_2-1}*\dots*\frac{p_n^{\alpha_n}-1}{p_n-1},\mbox{其中 }\alpha_i\mbox{ 是 }p_i\mbox{ 的指數} \end{align} \]
理解

如果只看一個質因數,那麼在固定其他的情況下,這個因數就可以為因數和做出它所有次冪的貢獻,然後還是乘起來就行啦