自己推出来还是非常巧妙

考 虑 k = 1 的 时 候 怎 么 构 造 考虑k=1的时候怎么构造 考虑k=1的时候怎么构造

因 为 k ! = 1 时 只 需 要 把 上 面 的 构 造 方 案 都 成 上 k 即 可 满 足 因为k!=1时只需要把上面的构造方案都成上k即可满足 因为k!=1时只需要把上面的构造方案都成上k即可满足

手推一下,发现下面这样就能满足

1 3 5 4

7 9 11 10

13 15 17 16

发 现 什 么 ? 每 组 都 是 三 个 连 续 奇 数 + ( 最 大 奇 数 − 1 的 偶 数 ) 发现什么?每组都是三个连续奇数+(最大奇数-1的偶数) 发现什么?每组都是三个连续奇数+(最大奇数−1的偶数)

这 是 啥 原 理 ? 因 为 k = 1 时 要 求 每 组 内 的 数 互 质 这是啥原理?因为k=1时要求每组内的数互质 这是啥原理?因为k=1时要求每组内的数互质

一 旦 选 两 个 偶 数 就 会 导 致 g c d = 2 , 那 么 选 1 个 偶 数 3 个 奇 数 保 证 最 小 一旦选两个偶数就会导致gcd=2,那么选1个偶数3个奇数保证最小 一旦选两个偶数就会导致gcd=2,那么选1个偶数3个奇数保证最小

偶 数 尽 可 能 贴 近 选 的 三 个 奇 数 , 否 则 偶 数 会 和 奇 数 有 公 因 子 偶数尽可能贴近选的三个奇数,否则偶数会和奇数有公因子 偶数尽可能贴近选的三个奇数,否则偶数会和奇数有公因子

足够近的数是不会有公因子的

/*
构造最小的m,利用[1,m]
构造出n个不同的4元素集合, 每对数的gcd=k

2 4 6 8 10 12 14 16 18

最后一定是选4n个数字,使得每个数字是k的倍数
分成n组每组4个,彼此互质

1 2 3 11
5 7 8 9

1 2 3 5
4 7 9 11
6 13 15 17
*/
#include <bits/stdc++.h>
using namespace std;
int n,k;
int main()
{
cin >> n >> k;
//3个奇数就分一组
int ci=n*2*3-1;//第ci个奇数才行
printf("%d\n",ci*k);
int ji=1;
for(int i=1;i<=n;i++)
{
printf("%d %d %d %d\n",ji*k,(ji+2)*k,(ji+4)*k,(ji+3)*k);
ji+=6;
}
}