寻找完美数的Python算法
请你帮我更正这个代码!这是为了找到所有低于10000的完美数字,我用评论来解释我在做什么。谢谢寻找完美数的Python算法,python,python-3.x,while-loop,factors,Python,Python 3.x,While Loop,Factors,请你帮我更正这个代码!这是为了找到所有低于10000的完美数字,我用评论来解释我在做什么。谢谢 #Stores list of factors and first perfect number facs = [] x = 1 #Defines function for finding factors def findfactors(num): #Creates for loop to find all factors of num for i in range(1, num
#Stores list of factors and first perfect number
facs = []
x = 1
#Defines function for finding factors
def findfactors(num):
#Creates for loop to find all factors of num
for i in range(1, num + 1):
if num % i == 0:
#Stores factor in facs
facs.append(i)
#Activates loop
while x < 10000:
#Finds factors of x and appends them to list
findfactors(x)
#Finds sum of list
facsum = sum(facs)
#Makes decision based on sum of factors and original number
if facsum == x:
#Ouputs and increases x
print(x)
x += 1
else:
#Increases x
x += 1
#存储因子列表和第一个完美数
facs=[]
x=1
#定义查找因子的函数
def findfactors(num):
#创建for循环以查找num的所有因子
对于范围内的i(1,num+1):
如果num%i==0:
#facs中的存储因子
附件(一)
#激活循环
当x<10000时:
#查找x的因子并将它们附加到列表中
findfactors(x)
#查找列表的和
facsum=总和(facs)
#根据因素和原始数量之和做出决策
如果facsum==x:
#输出并增加x
打印(x)
x+=1
其他:
#增加x
x+=1
初始化def内的列表并返回,范围不应包括原始的num
,因此范围将从1到num,其中包括1,但不包括原始的num
,因此它将生成从1
到num-1
#Stores list of factors and first perfect number
x = 1
#Defines function for finding factors
def findfactors(num):
facs = []
for i in range(1, num):
if num % i == 0:
#Stores factor in facs
facs.append(i)
return facs
#Activates loop
while x < 1000:
#Finds factors of x and appends them to list
facs=findfactors(x)
#Finds sum of list
facsum = sum(facs)
#Makes decision based on sum of factors and original number
if facsum == x:
#Ouputs and increases x
print(x)
x+= 1
#存储因子列表和第一个完美数
x=1
#定义查找因子的函数
def findfactors(num):
facs=[]
对于范围内的i(1,num):
如果num%i==0:
#facs中的存储因子
附件(一)
返回facs
#激活循环
当x<1000时:
#查找x的因子并将它们附加到列表中
facs=FindFactor(x)
#查找列表的和
facsum=总和(facs)
#根据因素和原始数量之和做出决策
如果facsum==x:
#输出并增加x
打印(x)
x+=1
比生成列表快得多
接近
#存储因子列表和第一个完美数
x=1
#定义查找因子的函数
从functools导入reduce
def系数(n):
返回集(减少(列表),
([i,n//i]表示范围(1,int(n**0.5)+1)内的i,如果n%i==0)))
#激活循环
当x<10000时:
#查找x的因子并将它们附加到列表中
facs=系数(x)
facs.删除(x)#删除原始编号,因为不再需要该编号
#查找列表的和
facsum=总和(facs)
#根据因素和原始数量之和做出决策
如果facsum==x:
#输出并增加x
打印(x)
x+=1
这是一个更简单的逻辑实现
x = 1
#Defines function for finding factors
def isperfectnum(num):
sum=0
#Creates for loop to find all factors of num
for i in range(1, num ):
if num % i == 0:
sum=sum+i
if sum==num:
return TRUE
else
return FALSE
#Activates loop
while x < 10000:
#Finds perfect numbers
if isperfectnum(x):
print(x)
x=x+1
x=1
#定义查找因子的函数
def isperfectnum(数值):
总和=0
#创建for循环以查找num的所有因子
对于范围内的i(1,num):
如果num%i==0:
sum=sum+i
如果sum==num:
返回真值
其他的
返回错误
#激活循环
当x<10000时:
#寻找完全数
如果isperfectnum(x):
打印(x)
x=x+1
在数论中,完美数是相等的正整数 它的正因子之和,也就是它的 不包括数字本身的正因子(也称为 等分总和)。第一个完全数是6。下一个完全数 她28岁。接下来是完美的数字496和8128。 () 您必须将数字本身从因子列表中排除 此外,对于每个
x
必须从空的facs
开始,然后附加到它。您不希望在该列表中包含以前的数字。下面的代码可以工作
x = 1
def findfactors(num):
facs = []
for i in range(1, num):
if num % i == 0:
facs.append(i)
return facs
while x < 10000:
facs = findfactors(x)
facsum = sum(facs)
if facsum == x:
print(x)
x += 1
else:
x += 1
x=1
def findfactors(num):
facs=[]
对于范围内的i(1,num):
如果num%i==0:
附件(一)
返回facs
当x<10000时:
facs=FindFactor(x)
facsum=总和(facs)
如果facsum==x:
打印(x)
x+=1
其他:
x+=1
找到了问题
应该是:
for i in range(1, num - 1)
而不是:
for i in range(1, num + 1)
感谢所有的贡献者 您是否介意用以下内容扩展这个问题:您希望代码做什么,以及(更重要的是)它在做什么?它是否会产生错误信息?如果是,请将这些信息包括在您的问题中。首先检查数字是偶数还是奇数,然后在范围中添加一个步长参数将删除一半不需要的值,因为奇数不可能有偶数因子。这只是一个想法。@meissner\u我希望代码返回10000以下的所有完美数字,但它只打印我最初设置x的“1”。没有错误消息。对不起,我是新来的堆栈溢出@疯了?恐怕我不知道这意味着什么,因为我根本不是专家!在数论中,一个完美数是一个正整数,它等于它的正因子之和,也就是说,它的正因子之和不包括这个数本身(也称为它的等分和)。第一个完全数是6。下一个整数是28。然后是完全数496和8128。()所以,你必须排除数字本身,但要包括1。不要只是张贴代码,解释你为什么会这样做conclusion@Igoranze我之前在代码中说过,我忽略了1是其中的一个因素,但也添加了解释。当我尝试这一点时,它返回的是素数而不是完美数……仍然不起作用。检查我的答案。如果有帮助,请随意接受。
num=6;列表(范围(1,num-1))
您确定要范围到num-1而不是num吗?
for i in range(1, num + 1)