Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Chương trình C++ in số nguyên tố trong khoảng cho trước dùng STL

In số nguyên tố trong khoảng [a,b] dùng C++ STL. Sử dụng sàng Eratosthenes chạy dưới dạng subroutine, lưu số nguyên tố trong vector và in ra.

Ví dụ mã nguồn

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

typedef unsigned long long int unll;

vector<unll> eratosthemes(unll n) {
    vector<bool> prime_num(n+1, true);
    prime_num[0] = false;
    prime_num[1] = false;
    int m = sqrt(n);
    for (unll p = 2; p <= m; p++) {
        if (prime_num[p]) {
            for (unll i = p*2; i <= n; i += p)
                prime_num[i] = false;
        }
    }
    vector<unll> elements;
    for (int i = 0; i < n; i++)
        if (prime_num[i])
            elements.push_back(i);
    return elements;
}

bool check_zero(unll i) {
    return i == 0;
}

vector<unll> sieve_range(unll start, unll end) {
    vector<unll> s1 = eratosthemes(start);
    vector<unll> s2 = eratosthemes(end);
    vector<unll> elements(end - start);
    set_difference(s2.begin(), s2.end(), s1.begin(), s2.end(), elements.begin());
    vector<unll>::iterator itr = remove_if(elements.begin(), elements.end(), check_zero);
    elements.resize(itr - elements.begin());
    return elements;
}

int main(void) {
    unll start = 10;
    unll end = 90;
    vector<unll> elements = sieve_range(start, end);
    for (auto i : elements)
        cout << i << ' ';
    return 0;
}

Kết quả đầu ra

11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89