【题解】CF476D
题意
输入 \(n,k\),输出 \(n\) 个四元组满足以下条件:
- 四元组中任意两个数的最大公约数是 \(k\);
- 四元组内没有重复的数
要求 \(n\) 个四元组内最大的数最小。
第一行输出最大的数,下面 \(n\) 行输出四元组。
思路
-
若 \(k\ne1\),可以把四元组中的 \(4\) 个数都除以 \(k\),那么这 \(4\) 个数就互质了。原题可转换成求前 \(n\) 个互质的四元组。
-
\(x\) 为奇数时 \((x,x+1,x+2,x+4)\) 一定符合要求
综上,最大数就是 \((n\times6-1)\times k\) 了,其他同理。
代码
#include <iostream>
#include <cstdio>
#define int long long
using namespace std;
int n, k;
signed main()
{
scanf("%lld%lld", &n, &k);
printf("%lld\n", k * (n * 6 - 1));
for (int i = 1; i <= n; i++)
{
int x = i * 6 - 5;
printf("%lld %lld %lld %lld\n", k * x, k * (x + 1), k * (x + 2), k * (x + 4));
}
return 0;
}