学习笔记:数学-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} \]

理解

如果只看一个质因数,那么在固定其他的情况下,这个因数就可以为因数和做出它所有次幂的贡献,然后还是乘起来就行啦

posted @ 2021-08-06 17:27  RagnaLP  阅读(677)  评论(0编辑  收藏  举报