数论-质因数分解

质因数分解:把任意正整数分解成若干质数的乘积.


【例子】

6 = 2 * 3;

12 = 2 * 2 * 3;

18 = 2 * 3 * 3;

20 = 2 * 2 * 5;

100 = 2 * 2 * 5 * 5;

210 = 2 * 3 * 5 * 7;

......



【解法】从2开始,不能整除就+1

以20为例子.

先除以2,得到10;

再除以2,得到5;

5不能把2整除,2变为3

5不能把3整除,3变为4

5不能把4整除,5变为5;

除以5,得到1;结束;



打印一个数分解后的质因数表:


【Code1】O(n)的算法

int p[100010], sz;   //表 & 大小 

void Decom(int n) {
	for(int i=2; i<=n; i++) {
		if(n == 1) break; 
		while(n % i == 0) {
			p[++sz] = i;
			n /= i;
		}
	}
}





【Code2】O(sqrt(n))的算法


void Decom2(int n) {
	for(int i=2; i<=sqrt(n); i++) {
		if(n == 1) break;
		while(n % i == 0) {
			p[++sz] = i;
			n /= i;
		}
	}
	if(n != 1) p[++sz] = n;    //当n是质数时 无法分解 
}




【Code3】写成唯一分解定理-幂的形式


唯一分解定理:

如:48 = 2^4 * 3

int p[100010], c[100010], sz; //表 & 幂 & 大小 

void Decom3(int n) {
	for(int i=2; i<=n; i++) {
		if(n % i == 0) {
			p[++sz] = i;
			while(n % i == 0) {
				c[sz] ++;
				n /= i;
			}
		}
	}
}



@

你可能感兴趣的:(数论-质因数分解)