分解质因数

问题描述 :

将一个正整数N(133*5。

输入说明 :
输入一个正整数
输出说明 :
按照范例输出。
其中的质因数的输出顺序按照从小到大的顺序。
如果输入的整数本身是质数,则输出形式为:

3=3

输入范例 :

66

输出范例 :

66=2*3*11
#include 
#define maxlength 32768
using namespace std;

bool primes[maxlength];
int cnt[maxlength];
int main(){
    ios::sync_with_stdio(false);
    //求质因数表,初始化计数表
    for(int i=0;i<maxlength;i++){
        primes[i]=true;
        cnt[i]=0;
    }
    primes[0]=primes[1]=false;
    primes[2]=true;
    for(int i=2;i<maxlength;i++){
        if(primes[i]==false){
            continue;
        }else{
            for(int j=i+1;j<maxlength;j++){
                if(j%i==0){
                    primes[j]=false;
                }
            }
        }

    }
    int n,x,index=2;
    cin>>n;
    x=n;
    //分解质因数
    while(x!=1){
        for(int i =index;i<maxlength;i++){
            if(primes[i]==false){
                index++;
                continue;
            }else if(x%i!=0){
                index++;
                continue;
            }else{
                cnt[i]++;
                x/=i;
                break;
            }
        }
    }
    //输出表达式
    cout<<n<<'=';
    bool flag=false;
    for(int i=0;i<maxlength;i++){
        while(cnt[i]!=0){
            if(flag){
                    cout<<'*'<<i;
                    cnt[i]--;
            }else{
                cout<<i;
                cnt[i]--;
                flag=true;
            }
        }
    }
    cout<<endl;
    return 0;
}

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