計算所有在a~b之間的奇數數字
python 沒有內建 isOdd()函式,所以只能寫if判斷奇數、偶數
a, b = 100, 200
total = 0 # 如果用sum作為變數名稱會與內建函數衝突。如果取名為s會誤以為是string縮寫
for i in range(a, b+1):
if i % 2 == 1:
total += iprint(total)
也有人使用 i&1
來做計算:某數字是不是經過 "and musk 1" 之後為True
這概念在底層語言(例如C語言)效能上會快很多
但由於Python在實作方式的關係,這樣寫的運行速度不會比較快
程式碼:
if x & 1:
return 'odd'
else:
return 'even'
---
迴圈解的解法,時間複雜度是O(n)
當數字量非常大的時候
此時可以運用公式解法(等差數列求和)
(頭+尾)x N / 2
將頭尾數字相加,乘以項數(將數字差除以2)
ex: 1~9 => 1+3+5+7+9 = (1+9)*5/2 = 25
ex: 0~10 => 1+3+5+7+9 = (1+9)*5/2 = 25,計算結果同上
但是要先取邊界將數值調整為1與9(調整至奇數)
程式碼:
a, b = 100, 200
# 如果a, b是偶數,則調整為奇數
if a % 2 == 0:
a += 1
if b % 2 == 0:
b -= 1
# 也可這樣寫,如果a是偶數則+1;如果b是偶數,則-1
# a += a % 2 == 0
# b -= b % 2 == 0
n = (b - a) // 2 + 1 # 奇數項數
total = n * (a + b) // 2
print(total)
公式解法,時間複雜度為O(1),可大幅解省執行所需時間