如果一个数字可以被列表的所有条目整除,那么

时间:2017-06-03 16:26:29

标签: python loops

这是在尝试Euler项目的问题5时出现的,对不起,如果这是模糊的或显而易见的,我是编程的新手。

假设我有一个整数列表

v = range(1,n)= [1,...,n]

我想做的是:

如果m可以被v的所有条目整除,那么我想设置

m / v [i]我从2开始并迭代

然后我想继续重复这个过程,直到我最终得到一些不能被v的所有条目整除的东西。

以下是一个具体示例:

设v = [1,2,3,4]和m = 24

m可以被1,2,3和4整除,所以我们将m除以2给我们

m = 12,可以被1,2,3和4整除,所以我们除以3

给我们m = 4,它不能被1,2,3和4整除。所以我们就此止步。

使用循环组合有没有办法在python中执行此操作?

3 个答案:

答案 0 :(得分:1)

我认为这段代码应该满足您的要求:

v = [1,2,3,4]
m = 24
index = 1
done = False

while not done:
    if all([m % x == 0 for x in v]):
        m = m // v[index]
        if index + 1 == len(v):
            print('Exhausted v')
            done = True
        else:
            index += 1
    else:
        done = True
        print('Not all elements in v evenly divide m')

那就是说,这不是解决Project Euler问题的最佳方法5.更直接,更快捷的方法是:

solved = False
num = 2520
while not solved:
    num += 2520
    if all([num % x == 0 for x in [11, 13, 14, 16, 17, 18, 19, 20]]):
        solved = True
print(num)

在这种方法中,我们知道答案将是2520的倍数,因此我们按照该数量增加我们检查的值。我们还知道需要检查的唯一值是[11, 13, 14, 16, 17, 18, 19, 20],因为[1,20]范围内不在该列表中的数字是列表中至少一个数字的因子

答案 1 :(得分:1)

尝试这个尺寸,感觉这就是你要求的:

v = [1,2,3,4]
m = 24

cont = True
c = 1
d = m

while cont:
    d = d/c
    for i in v:
        if d % i != 0:
            cont = False
            result = d
            break
    c+=1

print (d)

输出为4.

答案 2 :(得分:1)

我认为此代码可以解决您的问题:

config/initializers/simple_form.rb