突然想到一道简单题,但也有深意!!

本文介绍三种求解1到n范围内能被3或5整除的数的和的方法:直接遍历求和法、优化遍历求和法及数学集合求和法,并对比了它们的效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  给出一个 n <= 10亿 ,求出在 1 ~ n 范围内能被 3 或 5 整除的数的和 !!!!!运行时间 <= 2 s 内。

第一种解法,费时:
long long sum = 0 ;
    for (int k = 1; k <= n; k++) {
        if (k%3 == 0 || k%5 == 0) {
            sum += k ;
        }
    }
    printf(" %lld\n", sum);


第二种解法,高效:
 long long sum = 0 ;
    for (int i = 1; i*3 <= n ; i++) {
        if (i % 5 != 0 ) {
            sum += i*3 ;
        }
        
        if (i*5 <= n) {
            sum += i*5 ;
        }
    }

第三种数学集合解法,更高效:
 long long n = 1000000000 ;
 long long sum = 0 , k3 , k5 , k15 , m3 , m5 , m15 ;
 k3 = n / 3 ;
 k5 = n / 5 ;
 k15 = n / 15 ;
    
 m3 = 3 * k3 * (k3 + 1) / 2 ;
 m5 = 5 * k5 * (k5 + 1) / 2 ;
 m15 = 15 * k15 * (k15 + 1) / 2 ;
    
 sum = m3 + m5 - m15 ;



评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值