给定 k 正整数a 1 < a 2 < a 3 < ......< a k ,以及大于 k 的所有整数,我们要检查集合A = {a i :i∈[1, k]}∪{n:n> a k ,n∈ℕ} = {a 1 , 2 , 3 ,..., a k , k + 1, k +2,...}在加法时关闭。这意味着:
Σ1≤i≤k a i * b i ∈A,对于任何非负整数b i < /子>
例如,{2,4,6,7,8,....}在添加时关闭。
有没有简单的方法可以做到这一点?我们可以在Mathematica或Matlab中使用的任何函数吗?
答案 0 :(得分:5)
如果小于 k 的不连续部分不大,我相信你可以直接接近它:
a = {2, 4, 6};
Tr /@ Subsets[a, {2}];
TakeWhile[%, # < Last@a &];
Complement[%, a] === {}
答案 1 :(得分:2)
平庸观察:任何具有操作数>= a_k
的总和都是A的成员,因此您只需要关注两个操作数来自集合B = {a_1 .. a_(k-1)}
的总和。伪代码的天真解决方案:
for i from k-1 down to 1
for j from i down to 1
if (a_i + a_j < a_k) and (a_i + a_j is not in B) then
return false
return true
答案 2 :(得分:0)
您最近对此问题的修改使其变得荒谬。我注意到:
a_1
到a_k
都是严格正整数a_k
,因此也严格为正整数因此,该集合的所有成员都是严格正整数。
但∑a_i*n_i ∈ A
显然不适用于所有非负整数n_i
。
具体来说,它不适用于n_i = 0
,因为总和为零,零不是严格正整数,因此不是该集合的成员。
现在,这是一个非常奇怪的“闭集”定义,而不是普遍接受的用法。但根据您的定义,对于任何k > 0
,该集合都不会关闭。