C - Coprime 2

分解质因数,对于\(\forall\) \(x\)\(\in\) [1, m],来说,任意一个质因数的倍数及其本身都与题目中给定的数的最大公约数,至少有一个不是1

#include <iostream>
using namespace std;
const int N = 1e5 + 10;
bool st[N], vis[N];
int p[N], ans[N], d[N];

int main()
{
    ans[1] = 1;
    int n, m, cnt = 1, w = 0;
    scanf("%d %d", &n, &m);

    for (int i = 0; i < n; i++) {
        int x;
        cin >> x;

        for (int i = 2; i <= x / i; i++) {
            if (x % i == 0) {
                st[i] = 1;
                while (x % i == 0)
                    x /= i;
            }
        }
        if (x > 1)
            st[x] = 1;
    }
    for (int i = 1; i <= m; i++) {
        for (int j = 2 * i; j <= m; j += i) {
            if (st[i] == 1)
                st[j] = 1;
        }
    }
    for (int j = 2; j <= m; j++) {
        if (!st[j])
            ans[++cnt] = j;
    }
    printf("%d\n", cnt);
    for (int i = 1; i <= cnt; i++)
        printf("%d\n", ans[i]);
    return 0;
}
posted @ 2022-07-18 19:58  Flying_bullet  阅读(36)  评论(0)    收藏  举报