【发布时间】:2020-11-29 17:05:51
【问题描述】:
我需要一个列出给定数字的较小互质数的函数。例如,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 更多的数学问题,但任何提示将不胜感激。
【问题讨论】: