整数唯一分解定理(Unique decomposition theorem for integers)

适用级别:入门组
难度系数:3

任何一个大于1的正整数都能唯一分解为有限个质数的乘积。

每个合数都可以写成几个质数相乘的形式,其中每个质数都是这个合数的因数,把一个合数用质因数相乘的形式表示出来,叫做分解质因数。如30=2×3×5 。分解质因数只针对合数。

代码实现一:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/**************************************************************** 
 * Description: c++ prime factor
 * Author: Alex Li
 * Date: 2023-06-12 18:13:30
 * LastEditTime: 2023-07-02 16:35:57
****************************************************************/
#include <iostream>
using namespace std;
 
void primeFactors(int n){
    int c=2;
    while(n>1){
        if(n%c==0){
        cout<<c<<" ";
        n/=c;
        }
        else c++;
    }
}
 
int main(){
    int n;
    cin>>n; 
    primeFactors(n);
    return 0;
}


代码实现二:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/**************************************************************** 
 * Description: C++ implementation of Unique decomposition theorem for integers
 * Author: Alex Li
 * Date: 2023-06-21 10:44:25
 * LastEditTime: 2023-06-21 11:08:12
****************************************************************/
#include <iostream>
using namespace std;

vector<int>v;//存储唯一分解定理的分解值
void dev(int n){
	int c=sqrt(n);//这里要单独提出来,否则下面for循环的时候n会变
	for(int i=2;i<=c;++i){
		//当n整除i的时候,就一直除到这个没办法再除为止
		while(n%i==0)n/=i,v.push_back(i);
		//容易发现,经过这样的处理,绝对不会出来i是非素数的情况下n%i=0,
		//比如i=2的时候被n整除,n除i到没有办法再除以之后,n绝对不可能在之后整除4
    }
    if(n!=1)//可能整除完还剩下一个数字, 这个数字一定是素数
		v.push_back(n);
}

int main(){
    int n;
    cin>>n;
    dev(n);
    for (int i = 0; i <v.size(); i++)cout<<v[i]<<' ';
    
}

Scroll to Top