我想创建一个函数,该函数使用列表推导产生一个从1到300的所有数字的列表,这些数字可以被6和10整除。预期的输出如下:
ist_result = special_nums()
list_result
[30, 60, 90, 120, 150, 180, 210, 240, 270, 300]
我认为我可能必须以某种方式使用范围函数,但不确定。有什么想法吗?
答案 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>