题目

给出一个数 x,判断它是否为素数,并输出所有它的素因子。

解题思路

使用筛法求素数会内存超限。所以,使用试除法求素数:令 i 的取值范围为 [2, sqrt(x)],若 i 能整除 x,则 x 不是质数,记录因子。

C++代码

#include<iostream>
#include<cmath>
#include<vector>
using namespace std;

int main(){
    int T;
    cin >> T;
    int x;
    while(T--){
        cin >> x;
        bool flag = true;
        vector<int> ans;
        int n = sqrt(x);
        for(int i=2; i<=n; ++i){
            if(x % i == 0){
                flag = false;
                ans.push_back(i);
                while(x % i == 0)
                    x /= i;
            }
            if(x == 1)
                break;
        }
        if(flag){
            cout << "isprime" << endl << x << endl;
        }
        else{
            cout << "noprime" << endl;
            for(int i=0; i<ans.size()-1; ++i){
                cout << ans[i] << " ";
            }
            cout << ans.back();
            if(x != 1)
                cout << " " << x;
            cout << endl;
        }
    }
    return 0;
}