<p>3和5有相同的倍数,比如15。在</p>
<p>你应该去掉这些倍数,你就会得到正确的答案</p>
<p>您还应该检查包含排除原则<a href="https://en.wikipedia.org/wiki/Inclusion-exclusion_principle#Counting_integers" rel="nofollow">https://en.wikipedia.org/wiki/Inclusion-exclusion_principle#Counting_integers</a></p>
<p>编辑:
这个问题可以在固定时间内解决。在以前的解决方案中,包含与排除相联系。在</p>
<p>假设你想得到小于100的3的倍数,你可以除以floor(100/3),同样的方法也适用于5,floor(100/5)。
现在要得到小于100的3和5的倍数,你必须将它们相加,然后减去两者的倍数。在本例中,减去15的倍数。
所以3和5的倍数小于100的答案是floor(100/3)+floor(100/5)-floor(100/15)。
如果你有两个以上的数字,它会变得更复杂一些,但是同样的方法也适用于更多的check <a href="https://en.wikipedia.org/wiki/Inclusion-exclusion_principle#Counting_integers" rel="nofollow">https://en.wikipedia.org/wiki/Inclusion-exclusion_principle#Counting_integers</a></p>
<p>编辑2:</p>
<p>也可以加速循环变量。
您当前的算法在列表中追加多个,这是非常慢的。
您应该切换内部和外部for循环。通过这样做,你可以检查是否有除数除以这个数,你就得到了除数。在</p>
<p>所以只要加上一个布尔变量,它告诉你是否有除数除以这个数,然后计算变量为真的次数。在</p>
<p>所以它会这样:</p>
<pre><code>def countMultiples(l, max_num):
nums = 0
for j in range(1, max_num):
isMultiple = False
for i in l:
if (j % i == 0):
isMultiple = True
if (isMultiple == True):
nums += 1
return nums
print countMultiples([13,25],100250)
</code></pre>