返回范围内一组数字的所有最小公倍数

时间:2018-08-06 01:24:53

标签: python python-3.x list

我想创建一个函数,该函数使用列表推导产生一个从1到300的所有数字的列表,这些数字可以被6和10整除。预期的输出如下:

 ist_result = special_nums()
    list_result
[30, 60, 90, 120, 150, 180, 210, 240, 270, 300]

我认为我可能必须以某种方式使用范围函数,但不确定。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

here,定义一个函数来计算2个或更多数字的质数:

smartfields

接下来,计算数字的lcm,然后迭代地发出数字。好消息是,如果您知道lcm,则不必遍历范围内的每个数字。

def gcd(a, b):
    """Return greatest common divisor using Euclid's Algorithm."""
    while b:      
        a, b = b, a % b
    return a

def lcm(a, b):
    """Return lowest common multiple."""
    return a * b // gcd(a, b)

def lcmm(*args):
    """Return lcm of args."""   
    return reduce(lcm, args)

from math import ceil

def get_multiples(start, end, *args):
   lcm = lcmm(*args)
   start = max(lcm, lcm * ceil(start / lcm))  # max(..., ...) in case start < lcm
   for i in range(start, end + 1, lcm):
       yield i

如上所述,这是有效的,因为它不会遍历所提供范围内的每个值,并且可以有效地缩放为> 2个值:

>>> list(get_multiples(1, 300, 6, 10))
[30, 60, 90, 120, 150, 180, 210, 240, 270, 300]

答案 1 :(得分:0)

将使用以下表达式(因为30是6和10的最小公分母):

pwsh -noprofile -command <your command>