如何用计算机代码检查一个无穷集在加法下是否闭合
How to check whether an infinite set is closed under addition with a computer code?
给定k正整数a1<a2<a3<lt;ak,以及所有大于ak的整数,我们要检查集合a={ai:i∈[1,k〕}∈{n:n>ak,n∈ℕ } ={a1,a2、a3…,ak+1,ak+2,…}在加法下闭合。这意味着:
∑1≤i≤kai*bi∈a,对于任何非负整数bi。
例如,{2,4,6,7,8,…}在加法下是闭的。
有什么简单的方法可以做到这一点吗?我们可以在Mathematica或Matlab中使用什么函数?
如果集合的小于k的不连续部分不大,我相信你可以直接这样处理:
a = {2, 4, 6};
Tr /@ Subsets[a, {2}];
TakeWhile[%, # < Last@a &];
Complement[%, a] === {}
一个平庸的观察结果:任何具有操作数>= 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
你最近对这个问题的修改让它变得荒谬。我注意到:
a_1
到a_k
都是严格正整数- 集合的其余成员严格大于
a_k
,因此也是严格的正整数
因此,集合的所有成员都是严格正整数。
但∑a_i*n_i ∈ A
显然不适用于所有非负整数n_i
。
具体来说,它不适用于n_i = 0
,因为和为零,并且零不是严格的正整数,因此不是集合的成员。
现在,这是"闭集"的一个非常奇怪的定义,而不是通常接受的用法。但根据您的定义,对于任何k > 0
,该集合都不是闭合的。
相关文章:
- 当另一个数组是内存集时,内存集是否会更改数组长度?
- '_HAS_CXX17'宏是否可用于自定义项目标头以启用C++17 语言集功能?
- 访问从联合与另一个成员集复制的联合中的一个成员是否未定义或未指定?
- 是否可以在C++中基于程序集输出(.dll或.exe)定义变量
- 编译器是否C++具有相同模板参数集的每个模板类实例生成代码?
- 在链接的程序集文件中,我想从 c++ 调用代码访问变量.是否可以在不触发访问冲突的情况下执行此操作?
- 在一个VS项目中使用多个工具集 - 是否存在风险
- 有条件地添加到过载集是否合法
- 是否有任何说明集支持MIMD Arch
- 确定代码中当前程序集是否为 32/64 位的最简单方法
- 内联程序集 - 检查单词是否为回文
- 编译器是否优化析构函数中的内存集
- C++中无序集的大小是否有限制
- 对于自定义类的一个未定义集,是否有一个默认的散列函数
- 是否可以根据C/C 代码上的Linux上的(动态更改的IP地址集)丢弃传入数据包
- 是否有一个标准的算法来查找列表项的并集
- 是否可以从C#调用具有数据集类型参数的C++函数
- 位集是否保证连续性
- 检查一个位集是否包含另一个位集的所有值
- 如何用计算机代码检查一个无穷集在加法下是否闭合