解题思路
题目要求构造一个长度至少为 2 的数组 a,满足:
- 数组中的每个元素都只能是 1 或合数
- 数组元素之和为 n
- 在所有满足条件的方案中,数组长度最短
显然,我们要做的是:尽量用更少的数凑出 n。
P4792.第1题-构造合法和数组
题目内容
给定一个正整数 n。请你找到一个长度至少为 2 的数组 a,使得数组 a 中仅包含 1 和合数(可以只包含 1,可以只包含合数,也可以同时有合数和 1),且 a 中所有元素的和为 n。如果有多个满足条件的 a,请输出长度最短的。如果有多个长度最短的 a,你可以输出任意一个。注意,自测运行功能可能因此返回错误结果,请自行检查答案正确性。
【名词解释】
合数:大于 1 的正整数,且有除 1 和自身外的正因子。
输入描述
每个测试文件均包含多组测试数据。第一行输入一个整数 T (1≤T≤103) 代表数据组数,每组测试数据描述如下:
输入一行一个正整数 n (2≤n≤1018)。
输出描述
对于每组测试数据,先输出一行一个正整数 k,表示 a 的长度。在第二行输出 k 个整数,表示 a 中的元素。如果存在多个解决方案,您可以输出任意一个,系统会自动判定是否正确。注意,自测运行功能可能因此返回错误结果,请自行检查答案正确性。
样例1
输入
3
8
10
2
输出
2
4 4
2
1 9
2
1 1
说明
-
当 n=8 时:
需要构造长度至少为 2、仅含 1 和合数、和为 8 的最短数组。
取两个合数 4+4=8,长度为 2,是最短合法数组。
-
当 n=10 时:
构造 1+9=10,其中 1 和 9(合数)均符合要求,数组长度为 2。
-
当 n=2 时:
只能拆分为 1+1=2,数组长度为 2,满足条件。