0

奇数のリストがありますが、まだ追加する必要があります。

for n in range(100, 200):
   if n % 2 == 1:
       print sum([n])
4

2 に答える 2

5

1 から N (両端を含む) までのすべての数値の合計は、 N * (N + 1) / 2 です。

def sum_all(N):
    return N * (N + 1) // 2

1 から N (両端を含む) までのすべての偶数の合計は、1 から N//2 までのすべての数の合計の 2 倍です。

def sum_even(N):
    return sum_all(N // 2) * 2

1 から N (両端を含む) までのすべての奇数の合計は、これらの差です。

def sum_odd(N):
    return sum_all(N) - sum_even(N)

最後に、a と b の間のすべての奇数の合計は、1 から b までのすべての奇数の合計から、1 から a - 1 までのすべての奇数の合計を引いたものです。

def sum_odd_range(a, b):
    return sum_odd(b) - sum_odd(a - 1)

元の質問に答えるには:

print sum_odd_range(100, 199)

sum() を使用したソリューションとは異なり、これらは O(1) であり、より大きな入力に対して任意に高速になることに注意してください。

于 2013-09-22T08:50:48.977 に答える