Python - 检查列表中的数字是否是数字的因子

时间:2010-03-14 17:09:58

标签: python list python-3.x factors

我有list个数字(integers)(例如,从1到10)。

它们不一定是连续的,但它们是按升序排列的。

我已多次提示用户输入可用数字的选项。输入该数字后,它将与列表中的任何因子一起被删除。

我阻止用户选择素数。但是,在某个时间点,可能存在非素数,其中没有任何因素存在。

我对Python比较陌生,所以我无法实现:

  • 检查所选数字是否没有剩余因素(即使它不是素数)。

  • 检查是否只保留素数,或者不保留数字 因素。

我正在考虑使用for语句,但我不确定如何实现它们。有人可以提供建议或代码吗?提前谢谢......

3 个答案:

答案 0 :(得分:3)

要检查剩余号码guess是否有任何因素,您可以使用any()

hasfactors = any(guess % n == 0 for n in numbers)

要检查所有剩余数字是否为素数,可以使用all()。 (因为你说你已经阻止用户输入素数我假设你有某种isprime()函数):

onlyprimes = all(isprime(n) for n in numbers)

答案 1 :(得分:2)

对于第一个问题,您可以使用列表推导来构建一个新列表,其中每个元素不是所选的数字,而不是所选数字的因子(请参阅代码)。将其与原始列表进行比较。

$ python
>>> selected_number = 6
>>> [x for x in range(1,11) if selected_number % x]
[4, 5, 7, 8, 9, 10]

对于第二个问题,检查每个元素是否为素数。如果没有,请检查没有因素的数字;对于每个元素,您可以mod覆盖原始列表,并检查它是否为零列表。不过,我确信有更快的方法。

答案 2 :(得分:1)

如果L是非零数字的列表,则数字N的因子列表是:

factors = [x for x in L if N % x == 0]

当然,如果N在L中没有因子,那么列表将是空的。

我不确定“没有因素的数字”是什么意思,除非你的意思是“素数”(?) - 在Python中检查primality时有几个SO问题和答案,我会使用{{1 (从我的扩展gmpy)但当然我有偏见; - )。

如果你的意思是“所有在L中没有因素的数字”,那么,它们中的数量非常多,所以很难列出所有数据。一个无限制的发电机:

gmpy.is_prime

一些优化是可能的,但这个很简单,我不愿意添加复杂的优化而不完全理解你所追求的是什么! - )