【欧拉计划】1. Multiples of 3 and 5

(本题取 $n=1000$)

【思路】$\mathcal O(n)$ 枚举所有能被 $3$ 和被 $5$ 整除的数,最后把能被 $15$ 整除的数减掉:

1
2
3
4
5
6
7
8
9
10
#include<stdio.h>
int ans;
int main()
{
for(int i=3;i<1000;i+=3)ans+=i;
for(int i=5;i<1000;i+=5)ans+=i;
for(int i=15;i<1000;i+=15)ans-=i;
printf("%d",ans);
return 0;
}

【优化】利用等差数列求和公式 $\mathcal O(1)$ 求解:

1
2
3
4
5
6
7
8
#include<stdio.h>
int ans;
int main()
{
ans=((3+999)*333>>1)+((5+995)*199>>1)-((15+990)*66>>1);
printf("%d",ans);
return 0;
}

【欧拉计划】1. Multiples of 3 and 5

https://hensier.github.io/projecteuler/1/

作者

hensier

发布于

2022-05-01

更新于

2023-01-02

许可协议

评论