擅长:python、mysql、java
<p>实际上,这个问题可以用O(1)而不是O(N)来解决,而无需使用任何循环或列表:</p>
<p>所需的和是3的所有倍数之和加上5的所有倍数之和减去给定数字1000(极限=999)以下(3*5=15)的倍数之和。这些和被计算为算术级数的和。
其计算方法如下:</p>
<pre><code>LIMIT=999
# Get the upper bounds for the arithmetic series
upper_for_three = LIMIT // 3
upper_for_five = LIMIT // 5
upper_for_fifteen = LIMIT // 15
# calculate sums
sum_three = 3*upper_for_three*(1 + upper_for_three) / 2
sum_five = 5*upper_for_five*(1 + upper_for_five) / 2
sum_fifteen = 15*upper_for_fifteen*(1 + upper_for_fifteen) / 2
# calculate total
total = sum_three + sum_five - sum_fifteen
# print result with Python 3
print(int(total))
</code></pre>
<p>结果是:</p>
<pre><code>>>>
233168
</code></pre>