【深基7.例2】质数筛 · 教师题解

【深基7.例2】质数筛

解题思路

先读入数组,再依原顺序检查每个数。对 x 从 2 试除到平方根,无因子时就是质数。

正确性说明

合数一定有一个不超过平方根的非平凡因子;排除 1 后,未找到因子的数就是质数。按数组顺序输出保持原顺序。

易错点

1 不是质数;不排序,不去掉重复出现的质数。

复杂度

n 个数的最大值为 A,时间 O(n√A),空间 O(n)。

参考代码(C++11)

#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int n;
    cin >> n;
    vector<int> a(n);
    for (int &x : a)
        cin >> x;
    bool first = true;
    for (int x : a) {
        bool prime = x >= 2;
        for (int d = 2; d * d <= x; d++)
            if (x % d == 0) {
                prime = false;
                break;
            }
        if (prime) {
            if (!first)
                cout << " ";
            cout << x;
            first = false;
        }
    }
    cout << "\n";
    return 0;
}
返回题目