题目要求将 1∼n 排成一个序列 b1,b2,…,bn,每个数恰好出现一次,并且对于所有偶数下标 i,数对 (bi−1,bi) 都必须是安全对。
安全对的定义是:两个整数之和不是罕数,且差的绝对值也不是罕数。
罕数是指大于 1 且只能被 1 和自身整除的正整数(即质数)。
因此,条件等价于:每个相邻数对的和与差的绝对值都不能是质数。
探险家发现了一组编号从 1 到 n 的能量水晶,他需要将这些水晶排成一列来激活机关。
我们称一个大于 1 的正整数为罕数,如果它除了 1 和自身之外没有其他的正因数。例如 2,3,5,7 是罕数,而 1,4,6,8,9 不是。
对于两个整数 x 和 y,如果 x+y 不是罕数,且 ∣x−y∣ 不是罕数,则称 (x,y) 是一个安全对。
现在要求你将 1 到 n 这 n 个整数排成一个序列 b1,b2,…,bn,使得每个整数都恰好出现一次,并且对于所有偶数下标 i(i=2,4,…,n),数对 (bi−1,bi) 都必须是安全对。
请你构造出任意一个满足条件的序列。如果不存在这样的排列,请报告无解。
题目保证 n 为偶数,且满足 2≤n≤2×105。单个测试文件中所有 n 的总和不超过 2×105,测试数据的组数 T 不超过 104。
第一行输入一个整数 T (1≤T≤104),表示测试数据的组数。 接下来 T 行,每行输入一个偶数 n (2≤n≤2×105),表示序列的长度。 保证所有 n 的总和不超过 2×105。
对于每组测试数据,输出一行。若可以构造出满足条件的序列,则输出 n 个用空格分隔的整数,表示构造出的序列(由 1 到 n 组成,每个数恰好出现一次);否则输出 −1。
输入
1
4
输出
-1
说明
当 n=4 时,由 4 个数字 1,2,3,4 组成的排列中,无论如何配对,总存在某个偶数下标对应的数对不满足安全对的条件。经过穷举或推理可知,不存在合法排列,故输出 −1。
输入
1
8
输出
1 5 2 6 3 7 4 8
说明
对于 n=8,可以使用长度为 8 的固定合法块构造。
序列为 1,5,2,6,3,7,4,8,内部组成 4 个对:(1,5)、(2,6)、(3,7)、(4,8)。
每一对的和分别为 6,8,10,12,均为大于 2 的偶数,不是质数;每一对的差的绝对值均为 4,也不是质数。因此满足所有安全对要求。
输入
2
10
14
输出
1 5 2 6 3 9 4 10 7 8
1 5 2 6 3 7 4 12 8 14 9 13 10 11
说明
本组包含两个测试数据。
当 n=10 时,采用固定的 10 块构造:1,5,2,6,3,9,4,10,7,8。相邻配对分别为 (1,5),(2,6),(3,9),(4,10),(7,8)。这些对的和均为偶数且大于 2,差的绝对值分别为 4,4,6,6,1,均不是质数,合法。
当 n=14 时,采用固定的 14 块构造:1,5,2,6,3,7,4,12,8,14,9,13,10,11。相邻配对分别为 (1,5),(2,6),(3,7),(4,12),(8,14),(9,13),(10,11),每组和与差均满足安全对条件。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.