Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 确定实用数字_Python - Fatal编程技术网

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的所有数字使用一次或零次
例如,n=12是一个实际数字,因为:

  • 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数只能使用一次
相反,n=3不是一个实际数字,因为:

  • 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的所有数字使用一次或零次
例如,n=12是一个实际数字,因为:

  • 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数只能使用一次
相反,n=3不是一个实际数字,因为:

  • 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中的“组合”就可以做到这一点?当然,您可以自己实现组合,例如()。我很肯定,你也可以用动态编程技术来代替它——这将更有效,但也更复杂。如果你想提高效率,我建议一个新问题是我们必须使用列表。我们必须使用列表。