【題解】AtCoder ABC 215D – Coprime 2

【題目敘述】https://atcoder.jp/contests/abc215/tasks/abc215_d
【Tag】質數篩法

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

int n, m, a, p[100005];
set <int> st;
vector <int> v;

int main() {
    for (int i = 2; i <= 100000; i++){
        if (p[i] == 0){
            for (int j = i; j <= 100000; j += i){
                p[j] = i;
            }
        }
    }
    cin >> n >> m;
    for (int i = 0; i < n; i++){
        cin >> a;
        while (a > 1){
            st.insert(p[a]);
            a /= p[a];
        }
    }
    for (int i = 1; i <= m; i++){
        int tmp = i;
        bool flag = false;
        while (tmp > 1){
            if (st.count(p[tmp])) flag = true;
            tmp /= p[tmp];
        }
        if (!flag) v.push_back(i);
    }
    cout << v.size() << "\n";
    for (int i:v){
        cout << i << "\n";
    }
}

分享本文 Share with friends