繁体   English   中英

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

[英]Python - Check if numbers in list are factors of a number

我有一个数字listintegers )(例如,从1到10)。

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

我已经多次提示用户输入可用数字的选择。 输入该数字后,会将其连同可能存在的所有因素从列表中删除。

我已阻止用户选择素数。 但是,在某个时间点上可能存在非质数,没有余数。

我是Python的新手,因此无法实现:

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

  • 检查是否仅保留质数或无因数的数。

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

要检查是否存在剩余数字guess任何因素,可以使用any()

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

要检查所有剩余数字是否均为质数,可以使用all() (由于您已经说过您已经禁止用户输入质数,所以我假设您具有某种isprime()函数):

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

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

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

对于第二个问题,请检查每个元素是否为质数。 如果不是,请检查没有因素的数字。 对于每一个元素,你可能mod在最初的名单,并检查它是否是零的列表。 不过,我敢肯定有一种更快的方法。

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

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

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

我不确定您所说的“无因子数”是什么意思,除非您说“素数”(?)-在Python中检查素数有一些SO问题和答案,我会使用gmpy.is_prime (来自扩展名gmpy ),但是我当然有偏见;-)。

如果您的意思是“所有在L中没有因数的数字”,那么,有无数个,因此很难列出所有这些。 他们的无限生成器:

import itertools

def nofactorsinlist(L):
  for i in itertools.count():
    if any(x for x in L if i % x == 0):
      continue
    yield i

可能会有一些优化,但是这确实很简单,我不愿意添加复杂的优化而又不完全了解您的追求!-)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM