这是在尝试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中执行此操作?
答案 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