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;
}

浙公网安备 33010602011771号