让我们解决这个问题:我已经在这里查看了这个答案。然而我的方法是不同的。我正在利用康托尔配对功能,基本上将三元组映射为整数。完整的顺序如下:
1) 迭代 (i,j) 并将 cantor(i,j) 添加到数组中,只要 gcd(i,j) == 1 并且 i < j
2)从小到大排序
我的初步理解会让我认为这应该返回一组有序的原始毕达哥拉斯三元组,不是吗?
这是代码:
def go(n):
tmpi = []
for i in range(1,n):
for j in range(n%2 +1,n,2):
if gcd(i,j) == 1:
if (i+j)%2 == 1:
if i < j:
tmpi.append(cantor(i,j))
tmpi.sort()
return tmpi
和康托尔函数:
def cantor(x,y):
return int(0.5*(x+y)*(x+y+1)+y)
我错过了什么吗?
编辑:
使用此附加代码:
def lister(li):
tmp = []
for i in li:
tmp.append(list(retTrp(invCant(i))))
return tmp
def listi2(li):
for i in li:
i.sort()
def sorti(li):
return sorted(li, key=itemgetter(2))
def doall(n):
tmp = lister(go(n))
listi2(tmp)
return sorti(tmp)
输入:
doall(100)[99]
应该返回
[429, 460, 629]
但是当输入为
doall(100)[100]
因此,我对订单提出了疑问。