これを行う方法はたくさんあります。ただし、数学について考えると、ガウスの古い問題によく似ています。ガウスは 1 から 100 までの数字を足すように求められ、高い値と低い値の各ペアの合計が 101 になることに気付きました (100 + 1、99 + 2、98 + 3…)。
high = b
low = a
したがって、いくつかのb + a
値を乗算する必要があります。いくつありますか?すべての整数について、それはただ
num_pairs = (high-low) // 2
次に、その数を掛けてhigh + low
答えを取得します。
result = (high + low) * num_pairs
しかし、必要なのは 1 つおきだけなので、もう一度 2 で割ります。
result //= 2
完全に:
def sumrange(low, high, step):
num_pairs = (high - low) // 2
result = (high + low) * num_pairs
return result // step
またsumrange = lambda low, high, step: (high - low) * (high + low) // (2 * step)
低い値が奇数であるかどうか、および高い値が含まれているか除外されているかに応じてオフセットする必要があるため、これはまだあなたの質問に対する完全な答えではありません。しかし、私はそれを演習として残します。
これをCWの回答にして、私の数学が面倒な場合に誰かが編集できるようにします。