质因数分解:把任意正整数分解成若干质数的乘积.
【例子】
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;
}
}
}
}
@