让我们一组整数大于1,并称之为X。我们将S(i)定义为X被i整除的所有成员的集合,其中i> 1。想从这些子集中选择一组集合,以便
他们的联合是集合X
X的元素不在两个集合中。
例如,我们可以重新组合{3..11}
为
{3,4,5,6,7,8,9,10,11}
S(3): {3, 6, 9, }
S(4): { 4, 8, }
S(5): { 5, 10, }
S(7): { 7, }
S(11):{ 11}
有些集合不能用这种方式表达。例如,如果我们采用{3..12}
,12
则是3和4的倍数,以防止我们的集合相互排斥。
某些集合可以多种方式表达,例如 {4..8}
可以表示为
{4,5,6,7,8}
S(4): {4, 8}
S(5): { 5, }
S(6): { 6, }
S(7): { 7, }
但也可以表示为
{4,5,6,7,8}
S(2): {4, 6, 8}
S(5): { 5, }
S(7): { 7, }
任务
我们的目标是编写一个程序,该程序将集合作为输入,并以这种方式输出覆盖它的最少子集。如果没有,则应输出除正整数以外的其他值(例如0
)。
这是一个 代码问题,因此答案将以字节计分,字节越少越好。
测验
{3..11} -> 5
{4..8} -> 3
{22,24,26,30} -> 1
{5} -> 1
如果没有,则应输出除正整数以外的其他值(例如0)。我们的程序不能导致未定义的行为吗?
—
Xcoder先生17年
另外,您可以添加一个测试用例
—
Xcoder先生17年
[5..5]
吗?我们可以收到类似的东西[8..4]
吗?
@ Mr.Xcoder不可以。程序应该能够识别不可能的情况,而不仅仅是永久循环或崩溃。
—
发布Rock Garf Hunter
“
—
彼得·泰勒
12
是两者的倍数,3
并4
防止我们的集合相互排斥 ”:为什么?我在问题陈述中没有看到其他任何内容,需要12
将它们都放入这两个子集中。
另外,测试用例是什么?
—
彼得·泰勒
[22,24,26,30]
是的倍数2
。您确定删除它并对其进行沙箱处理会更好吗?