天天看點

藍橋杯 ADV-223 因式分解

藍橋杯 ADV-223 因式分解

問題描述

設計算法,使用者輸入合數,程式輸出若個素數的乘積。例如,輸入6,輸出2*3。輸入20,輸出2*2*5。

輸入樣例

120

輸出樣例

2*2*2*3*5

思路解析

  • 篩選出5000内的素數,從頭到尾進行取餘,餘數為0,則該素數為因子,餘數不為0,則疊代至下一個素數,直到該數為1。
#include<iostream>
#include<vector>

using namespace std;

bool isPrime(int num){
    if (num == 0 || num == 1)
        return false;
    for (int i = 2; i * i <= num; i++){
        if (num % i == 0)
            return false;
    }
    return true; 
}

int main() {
    int cn, index = 0;
    vector<int> pm, res;

    cin >> cn;

    for (int i = 0; i < 50000; i++){
        if (isPrime(i)){
            pm.push_back(i);
        }
    }
    index = 0;
    while (cn != 1){
        if (cn % pm[index] == 0){
            cn /= pm[index];
            res.push_back(pm[index]);
        }
        else
            index++;        
    }
    cout << res[0];
    for (int i = 1; i < res.size(); i++){
        cout << "*";
        cout << res[i];
    }
    return 0;
}
           

繼續閱讀