Python 确定实用数字
所以我得到一个分数,必须确定分母是否是一个实际的数字。实用数字说明: 我已经有了一个函数,可以返回数字的所有因子:Python 确定实用数字,python,Python,所以我得到一个分数,必须确定分母是否是一个实际的数字。实用数字说明: 我已经有了一个函数,可以返回数字的所有因子: def factorFinder(x): #Pre: Valid Integer for students #Post: Returns list of factors for that number #Takes the number of students as argument and returns all factors for that numb
def factorFinder(x):
#Pre: Valid Integer for students
#Post: Returns list of factors for that number
#Takes the number of students as argument and returns all factors for that number
lst = []
for i in range(1, x+1):
if x % i == 0:
lst.append(i)
return(lst)
一个函数给出一系列因子作为参数,返回所有子列表的和的列表:
import itertools
def sumsOfSublists(lst):
# Pre: a non-empty list
# Post: returns a list of sums of all possible list sublists of length >= 2
# given a list, returns a sorted list containing sums of
# all combinations of sublists of length 2..list_length
sumList = []
for i in range(2, len(lst)+1):
zlist = list(itertools.combinations(lst,i))
for el in zlist:
sumList.append(sum(el))
return sorted(sumList)
我不知道如何去测试这个数字是否实用。即使在多个网站上阅读了“实用数字”的相关内容,我也不太理解它的概念。所以我想这更像是一个数学问题。
同时给出了两个数字,我需要打印出它们的埃及分数。(即)给定的7/8应打印以下内容:(1/2)+(1/4)+(1/8)。所有分子都必须为1。看起来你已经完成了所有繁重的工作,只需检查一下:
def is_practical(n):
s = set(sumsOfSublists(factorFinder(n)))
return all(i in s for i in range(1, n))
是否有任何理由将总和排序到
列表中
<代码>设置s的查找速度更快。看看起来你已经完成了所有的繁重工作,你只需要检查一下:
def is_practical(n):
s = set(sumsOfSublists(factorFinder(n)))
return all(i in s for i in range(1, n))
是否有任何理由将总和排序到
列表中
<代码>设置s的查找速度更快。请参见我重新编写了您的维基文章,希望它对您有所帮助,因为正如AChampion所说,您已经完成了所有繁重的工作;)
n是一个实用数字,如果:
- 设l=[1,2,…n-1]//所有小于n的数
- 设divs=[i表示范围(1,n)内的i,如果n%i==0]//n的所有除数(我将一个因子与一个数的项分解相关联,因此您可能应该在问题中将因子改为除数)
- 现在,您必须将l的所有数字写入divs中的数字之和,您可以将divs的所有数字使用一次或零次
- l=[1,2,3,4,5,6,7,8,9,10,11]
- divs=[1,2,3,4,6]
- l[0]=divs[0],l[1]=divs[1],不允许使用l[10]=divs[0]+divs[3]+divs[4]=1+4+6=11//l[1]=divs[0]+divs[0],因为每个divs数只能使用一次
- l=[1,2]
- divs=[1]
- l[0]=divs[0],l[1]=möp
我重新编写了你的维基文章,希望它能对你有所帮助——因为正如AChampion所说——你已经完成了所有的繁重工作;) n是一个实用数字,如果:
- 设l=[1,2,…n-1]//所有小于n的数
- 设divs=[i表示范围(1,n)内的i,如果n%i==0]//n的所有除数(我将一个因子与一个数的项分解相关联,因此您可能应该在问题中将因子改为除数)
- 现在,您必须将l的所有数字写入divs中的数字之和,您可以将divs的所有数字使用一次或零次
- l=[1,2,3,4,5,6,7,8,9,10,11]
- divs=[1,2,3,4,6]
- l[0]=divs[0],l[1]=divs[1],不允许使用l[10]=divs[0]+divs[3]+divs[4]=1+4+6=11//l[1]=divs[0]+divs[0],因为每个divs数只能使用一次
- l=[1,2]
- divs=[1]
- l[0]=divs[0],l[1]=möp
为什么要强制将
zlist
转换为list
?这真的是次优。迭代器的存在是为了避免这种情况。你应该在你的问题中包含一个实际数的定义。链接可能会随着时间的推移而腐烂。为什么要强制将zlist
转换为list
?这真的是次优。迭代器的存在是为了避免这种情况。你应该在你的问题中包含一个实际数的定义。链接可能会随着时间而腐烂。给出数字8返回错误,8是一个实际的数字?对不起,愚蠢的错误。修正了“范围(1,len(divs)+1)内的i”。没有足够的测试和快速编码-真丢脸^^刚刚用Wiki的第一个示例进行了测试。这应该足够了:)有没有一种方法不用使用itertools中的“组合”就可以做到这一点?当然,您可以自己实现组合,例如()。我很肯定,你也可以用动态编程技术来代替它——这将更有效,但也更复杂。如果你想提高效率,我建议一个新的问题是,如果数字8返回错误,8是一个实际的数字?对不起,愚蠢的错误。修正了“范围(1,len(divs)+1)内的i”。没有足够的测试和快速编码-真丢脸^^刚刚用Wiki的第一个示例进行了测试。这应该足够了:)有没有一种方法不用使用itertools中的“组合”就可以做到这一点?当然,您可以自己实现组合,例如()。我很肯定,你也可以用动态编程技术来代替它——这将更有效,但也更复杂。如果你想提高效率,我建议一个新问题是我们必须使用列表。我们必须使用列表。