python 正整数集_正整数的所有元组

通过枚举第三个整数=总数(第二个整数=总数,第三个整数=总数,依此类推)。注意total=3是可能的最小总和,因为每个元素都是正的,所以我们从t=3开始。在

在每个总计中,此代码按字典顺序生成它们。在def posint():

t = 3

while True:

for i in range(1, t-1):

for j in range(1, t-i):

yield i, j, t-i-j

t += 1

for i, j, k in posint():

print(i, j, k)

如果您想要一个更通用的版本来接受描述元组长度的参数n,那么可以使用"Stars and Bars"枚举和为t的元组。这给了您非负元组,但您可以向每个值添加一个,以获得唯一的正元组。在

^{pr2}$

一种更易于理解的通用方法根据组合的最大值,并按该值出现在其中的第一列来枚举组合。在这个方案中,最大值t且t出现在第i列的结果在i左侧的列中具有小于t的任意值,并且在i右侧的列中具有小于或等于t的任意值

这种方法相对容易理解,但结果的顺序有点奇怪。在import itertools

def posint(n):

for t in itertools.count(1):

for i in range(n):

for c1 in itertools.product(range(1, t), repeat=i):

for c2 in itertools.product(range(1, t+1), repeat=n-i-1):

yield c1 + (t,) + c2

for c in posint(3):

print(c)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值