我需要一个函数,它可以列出给定数字的更小的互质数。例如,co(11)得到[1,7,9,10]
,其和为27
。但是我想要获得生成最大总和的互质数。对于co(11),它应该消除10(因为5+8 > 10),并返回[1,5,7,8,9]
以获得最大总和,即30
。
以下是函数:
import math
def Co(n):
Mylist = [x for x in range(1, n)]
removeds =[]
for x in Mylist:
y = Mylist.index(x)
for z in Mylist[y+1:]:
if math.gcd(x, z) != 1:
removed = Mylist.pop(y)
removeds.append(removed)
#print(removed)
Mylist[1:] = Mylist
#print(Mylist)
break
Mylist= list(dict.fromkeys(Mylist))
removeds = list(dict.fromkeys(removeds))
removeds.sort(reverse = True)
for a in removeds:
check = []
for b in Mylist:
if math.gcd(a, b) != 1:
break
else:
check.append(a)
if len(check) == len(Mylist):
Mylist.append(a)
print(Mylist)
print(sum(Mylist))
Co(11)
结果如下:
[1, 7, 9, 10]
27
为了获取可能的互质集合的最大和,应该返回:
[1, 5, 7, 8, 9]
30
我考虑获取所有可能的互质集合,然后进行比较以获得最大的总和。但当 Co(N)
变得更大时,它变得难以控制且效率低下。我知道这更多是数学问题而不是 python 问题,但任何提示将不胜感激。
main(30)
时,它返回目前为止最好的{1, 2, 5, 7, 9}
,实际上这并不是最佳的结果。我是否对整个函数有什么误解? - fatih arslanmax_cliques
中迭代了错误的顶点集v。 - David Eisenstat