整数分解

改自:https://blog.csdn.net/summerxiachen/article/details/62421985

整数分解

在数学中,整数分解(英语:integer factorization)又称素因数分解(prime factorization),是将一个正整数写成几个约数的乘积。例如,给出45这个数,它可以分解成9×5。根据算术基本定理,这样的分解结果应该是独一无二的。这个问题在代数学、密码学、计算复杂性理论和量子计算机等领域中有重要意义。

因子分解

完整的因子列表可以根据约数分解推导出,将幂从零不断增加直到等于这个数。例如,因为45=32×5,45可以被30×50,30×51,31×50,31×51,32×50,和32×51,或者 1,5,3,9,15,和 45整除。相对应的,约数分解只包括约数因子。

加法分解

#include <iostream>  
using namespace std;   
#define MAX 20  
int res_num;  
// 拆分元素暂存在res数组中  
int res[MAX];  
int p = 0;  

// 将n进行拆分 
void resolve(int n, int min_factor=1);  

int main() {  
    while (1) {  
        int n;  
        cin >> n;  
        resolve(n,1);  
        printf("共有%d种分解\n",res_num);
        res_num = 0;  
    }  
    return 0;  
}  

void resolve(int n, int min_factor) {  
    if (n<=0) { // 出口  
        for (int i=0; i<p; i++)  
            cout << res[i] << " ";  
        cout << endl;  
        res_num++;  
    }  

    for (int i=min_factor; i<=n; i++) {     // 此处修改  
        res[p] = i;  
        p++;        //  p ++来顺序存储各个拆分元素  
        resolve(n-i, i);// 此处修改  
        p--;        //  // 此行必须有,执行完这一行,下一次for循环才能回退  
    }  
}  

输入

6

输出
1 1 1 1 1 1
1 1 1 1 2
1 1 1 3
1 1 2 2
1 1 4
1 2 3
1 5
2 2 2
2 4
3 3
6
共有11种分解

乘法分解

#include<iostream>
using namespace std;
int data[100];
int p=0;
int num=0; 
int x;
void resolve(int n,int min)
{
    if(n<2) 
    {
        num++;
        cout<<x<<"=";
        for(int j=0;j<p;j++)
        {
            cout<<data[j];
            if(j!=p-1)
            cout<<"*";
            if(data[j]==x)
            cout<<"*1";
        }
        cout<<endl;
        return ;
    }
    for(int i=min;i<=n;i++)
    {
        if(n%i==0)
        {
            data[p]=i;
            p++; 
            resolve(n/i,i);
            p--;        
        }
    }
}
int main()
{
        while(cin>>x)
        {
            resolve(x,2);
            printf("共有%d种分解\n",num);
        }
}

输入

120

输出

120=2*2*2*3*5
120=2*2*2*15
120=2*2*3*10
120=2*2*5*6
120=2*2*30
120=2*3*4*5
120=2*3*20
120=2*4*15
120=2*5*12
120=2*6*10
120=2*60
120=3*4*10
120=3*5*8
120=3*40
120=4*5*6
120=4*30
120=5*24
120=6*20
120=8*15
120=10*12
120=120*1
共有21种分解

猜你喜欢

转载自blog.csdn.net/aaakkk_1996/article/details/81639458