C++ 数论-质因数分解

来源:互联网 发布:商家联盟管理系统源码 编辑:程序博客网 时间:2024/06/07 02:38

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


【例子】

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;}}}}



@

原创粉丝点击