[算法/模板]质因数分解

[算法/模板]质因数分解[TOC]一、质因数分解的基本定理$\forallN\in(1,\infty)$都能唯一分解成有限个质数的乘积,可写作:$$N=P_1^{c_1}P_2^{c_2}…P_m^{c_m}$$其中$c_i$为正整数,$P_i$都是质数,且满足$P_1\ltP_2\lt…\lt

大家好,欢迎来到IT知识分享网。

[TOC]
###**一、质因数分解的基本定理**
$\forall N \in (1,\infty)$都能唯一分解成有限个质数的乘积,可写作:
$$N=P_1^{c_1}P_2^{c_2}...P_m^{c_m}$$
其中$c_i$为正整数,$P_i$都是质数,且满足$P_1\lt P_2\lt ...\lt P_m$。

我们可以扫描2~$\sqrt N$的每个数k,若k能整除N,那么我们从N中除掉所有的因子k,同时累计被除去的k的个数。
因为一个合数的因子一定在扫描到这个合数之前就从N中被除去了,因此扫描到能整除N的数一定是质数。
需要注意的是,若最终N没有被[2,$\sqrt N$]的数整除,则N为质数,直接累计就可以了。
综上,质因数分解的时间复杂度为$O(\sqrt N)$。
###**二、模板-质因数分解**
代码如下:
```
inline void Divide(){
	cnt=0;
	for(int i=2;i<=sqrt(n);i++){
		if(n%i==0){
			p[++cnt]=i;
			while(n%i==0){
				num[cnt]++;
				n/=i;
		        }
           }
       }
	if(n>1){
		p[++cnt]=n;num[cnt]=1;
	}
}//其中p为底数,num为对应的指数 
```


pic.png

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/33461.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信