从不小于 m 的首个 17 倍数起每隔 17 累加。
OJ: noi_openjudge
题目 ID: ch0105-10
难度:入门
标签:数学循环python
日期: 2026-07-30 23:01
题意
计算闭区间
思路
不小于 left 的首个 17 倍数是 (left + 16) // 17 * 17。之后每次加 17,range 不会生成不满足整除条件的数;若首项超过右端点,空 range 的和自然为 0。
代码
Python代码
python
left, right = map(int, input().split())
first_multiple = (left + 16) // 17 * 17
print(sum(range(first_multiple, right + 1, 17)))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 % 17 == 0)
sum += i;
}
printf("%d\n",sum);
return 0;
}复杂度
设区间内 17 的倍数个数为
总结
整除筛选可以先定位第一个倍数,再按除数步进,减少无效检查。