AtCoder [ARC118C] Coprime Set 题解
原文发布时间:2024-08-05 12:39。
构造题。
设 \(a=x\times y,b=x\times z,c=y\times z\),其中 \(x,y,z\) 互质,则 \((a,b)=x,(a,c)=y,(b,c)=z,(a,b,c)=1\)。
因为 \(1\) 和任意数的最大公因数都为 \(1\),所以我们只需要构造三个数满足上文的 \(a,b,c\) 即可。因为 \(A_i\le 10000\),所以构造的越小越好,\(2\times 3,2\times 5,3\times 5\) 即 \(6,10,15\) 能很好的满足要求。
已经解决了第三个要求,接下来完成第一和第二个要求。因为 \((a,b),(a,c),(b,c)\) 都不为 \(1\),所以它们的倍数的最大公约数也不为 \(1\)。因此只需要构造 \(6,10,15\) 的倍数即可,注意去重和判断有没有超过 \(10000\)。
代码:
#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main() {
int n;
cin >> n;
int cnt = 0;
cout << "6 10 15 ";
for (int i = 2; cnt <= n - 4 && 6 * i <= 10000; i++) {
cout << 6 * i << ' ';
cnt++;
}
for (int i = 2; cnt <= n - 4 && 10 * i <= 10000; i++) {
if (10 * i % 6 != 0) {
cout << 10 * i << ' ';
cnt++;
}
}
for (int i = 2; cnt <= n - 4 && 15 * i <= 10000; i++) {
if (15 * i % 6 != 0 && 15 * i % 10 != 0) {
cout << 15 * i << ' ';
cnt++;
}
}
return 0;
}

浙公网安备 33010602011771号