循环差集是一组具有唯一属性的正整数:
- 令其
n
为集合中的最大整数。 - 让
r
是(在该组不是必需的)的任何整数大于0但小于或等于n/2
。 - 让
k
是解决方案的数量来(b - a) % n = r
这里a
和b
是一组的任何成员。每个解决方案都是有序对(a,b)
。(还要注意n
,与许多语言的实现不同,此版本的模通过加负数使负数为正。) - 最后,当且仅当这是一个循环差集时,的值
k
才取决于您对的选择r
。就是说,所有的值都r
为上述一致性提供相同数量的解。
可以通过以下示例进行说明:
Cyclic difference set: {4,5,6,8,9,11}
0 < r <= 11/2, so r = 1,2,3,4,5
r=1: (4,5) (5,6) (8,9)
r=2: (4,6) (6,8) (9,11)
r=3: (5,8) (6,9) (8,11)
r=4: (4,8) (5,9) (11,4) since (4-11)%11=(-7)%11=4
r=5: (4,9) (6,11) (11,5)
的每个值都r
具有相同数量的解,在这种情况下为3,因此这是一个循环差集。
输入值
输入将是一个正整数列表。由于这是一个set属性,因此假设输入未排序。您可以假定n
至少为2
,尽管k
可能为零。
输出量
如果该集合是循环差异集合,则您的程序/函数应输出真实值,否则输出虚假值。
测试用例
有效的循环差异集:
10,12,17,18,21
7,5,4
57,1,5,7,17,35,38,49
1,24,35,38,40,53,86,108,114,118,135,144,185,210,254,266,273
16,3,19,4,8,10,15,5,6
8,23,11,12,15,2,3,5,7,17,1
(数据源,尽管它们的约定不同)
无效的循环差异集:
1,2,3,4,20
57,3,5,7,17,35,38,49
3,4,5,9
14,10,8
@EriktheOutgolfer如果
—
PhiNotPi
b
和a
是相同的数字,(b-a)%n = 0
则为,但是0并不是您要寻找解决方案的值之一。因此,并没有明确禁止它们相同的数字,但永远不会如此。
如果
—
Ton Hospel '18年
7 7 7
输入无效,我真的很喜欢。一组不会重复值
@TonHospel完成并完成。
—
PhiNotPi
7 7 7
是另一个用户的请求,但我将其删除,因为它不是一个集合。
高尔夫的想法:我们不需要你来约束
—
JungHwan Min
r
的0 < r <= max(input)/2
,而是0 < r < max(input)
因为我们能够获得r > max(input)/2
通过简单地翻转减法案件r <= max(input)/2
的情况。
a
并且b
是同一成员(不一定是a ≠ b
)吗?