奇数求和

GitHub跳转原题关系图返回列表

从区间内首个奇数起每次加 2,累计所有奇数。

OJ: noi_openjudge

题目 ID: ch0105-09

难度:入门

标签:数学循环python

日期: 2026-07-30 23:01

题意

计算闭区间 [m,n][m,n] 中所有奇数的和。

思路

若左端点为偶数,首个奇数是 left + 1,否则就是 left。之后奇数间隔恒为 2,range(first_odd, right + 1, 2) 只生成需要累加的数。

代码

Python代码

python
left, right = map(int, input().split())
first_odd = left if left % 2 else left + 1
print(sum(range(first_odd, right + 1, 2)))

C++代码

cpp
#include <cstdio>

int main(){
	int m,n;
	scanf("%d%d",&m,&n);
	int i,sum = 0;
	for(i=m;i<=n;i++){
		if( i % 2 == 1)
			sum += i;
	}
	printf("%d",sum);
	return 0;
}

复杂度

设区间内奇数数目为 kk,时间复杂度为 O(k)O(k),额外空间复杂度为 O(1)O(1)

总结

筛选固定步长序列时,应让 range 的起点和步长直接表达筛选规则。