欧拉计划 第一题

If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.

Find the sum of all the multiples of 3 or 5 below 1000.

如果我们列出所有低于10的自然数是3或5的倍数,我们得到3,5,6和9,这些倍数的总和为23。

找到1000以下所有3或5的倍数的总和。

1.暴力求解法

从1遍历到1000,将能被3和5整除的数相加到sum中,注意存在既能整除3又能整除5的数,所以用或运算

#include <stdio.h>

int main(){
    int sum = 0;
    for(int i = 1; i < 1000; i++){
        if((i % 3 == 0) || (i % 5 == 0)){
            sum += i;
        }
    }
    printf("%d\n", sum);
    
    return 0;
}
2.技巧求解法

由于我们初中的时候求过等差数列的求和运算,所以在这里,我们并不需要花费那么多时间去遍历,于是我们巧用公式等差数列的求和公式= (首相 + 末项) * 项数 / 2;

注意:在这里能被3和5同时整除的数加了两次,所以我们需要把重复加的数字通过公式减下去


#include <stdio.h> ​
int main()
{
    intsum3, sum5, sum15;
    sum3 = (3 + 999) * (999 / 3) / 2;
    sum5 = (5 + 995) * (995 / 5) / 2;
    sum15 = (15 + 990) * (990 / 15) / 2;
    printf("%d\n", sum3 + sum5 - sum15);
    return0;
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值