题目连结:https://rosalind.info/problems/ini4/
输入:
100 200
输出:
7500
计算所有在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),可大幅解省执行所需时间