使用Python查找数字的所有除数

使用Python查找数字的所有除数,python,factoring,Python,Factoring,我正在尝试编写一个Python脚本来查找素数。按照我的方法,脚本将从一个范围中取一个数字,确定因子,确定仅有的两个因子是否为1和它本身,如果是质数,则返回true。我需要代码方面的帮助才能找到因素 num = int(input("enter: ")) i = 1 while i < num: if num % i == 0: print(i) i += 1 else: pass i设置为1,因为不能除以0。然而,返回开始工作,然而,它只返回了几个数字

我正在尝试编写一个Python脚本来查找素数。按照我的方法,脚本将从一个范围中取一个数字,确定因子,确定仅有的两个因子是否为1和它本身,如果是质数,则返回true。我需要代码方面的帮助才能找到因素

num = int(input("enter: "))

i = 1

while i < num:
  if num % i == 0:
    print(i)
    i += 1
  else:
    pass
i设置为1,因为不能除以0。然而,返回开始工作,然而,它只返回了几个数字,而不是我所希望的完整列表。例如,您输入20,它只返回1和2。

在偶数情况下,您只增加i。这会解决它:

num=intinpunter: i=1 而我 num=intinpunter: 对于范围1中的i,num: 如果num%i==0: 普林蒂
清楚地说,你试图找到一个数字的所有除数,而不是所有的倍数。除了0之外,每个num都有无穷多的倍数,所以找到它们是毫无意义的;num*∞ 是num的倍数,忽略了与无限有关的奇怪之处,其中无限的任何倍数仍然是无限的;你明白了,就像num*0和num*之间num的无限倍数一样∞.旁注:如果你的目标是识别素数,你不需要计算num的所有因子。只需在2开始寻找因子,然后只测试从3到num平方根的奇数,以避免过度工作,如果你找到一个因子,停止;你已经知道它是复合的,不是质数。有比试用除法更有效的方法,特别是当您需要确定许多数字的素性时,但将每次执行的~num检查减少到最大值√num/2检查通常很少,只需很少的努力就可以得到很大的改进。旁注:关于为什么使用范围更好:一,它更简单一行,所有逻辑都嵌入其中,而不是三行分散。第二,如果语句不能意外跳过一个增量,则继续更安全。第三,速度更快;简单的数学操作具有最高的开销之一:在CPython中,由于int是对象,数学本身涉及不断加载、将其解包为C类型、完成工作,然后使用许多8字节代码操作重新打包;range通过在C层做更多的工作,用更少的2字节代码操作,极大地减少了这种开销。谢谢!我知道这是一个更简单的解决方案,我只是一个初学者,但我真的很感激!它给了我向前推进的能力,尽管我也发现由于包含了范围,我认为必须在num中加1才能找到素数。但是谢谢你@gumbo_hopkins:您不需要在num中添加1;range不包括停止值num,因此您不会测试num本身来确定它是否是num的除数,但无论如何,这是非常正确的,并且与素性测试无关,因为可以被您自己整除并不会使您成为复合对象。您的原始循环无论如何都排除了num,因为它测试的是i