【每日一题Day350】LC2652倍数求和 | 数学+容斥原理

简介: 【每日一题Day350】LC2652倍数求和 | 数学+容斥原理

倍数求和【LC2652】

给你一个正整数 n ,请你计算在 [1,n] 范围内能被 357 整除的所有整数之和。

返回一个整数,用于表示给定范围内所有满足约束条件的数字之和。

暴力枚举

  • 思路

image.png

class Solution {
    public int sumOfMultiples(int n) {
        int res = 0;
        for (int i = 1; i <= n; i++){
            if (i % 3 == 0 || i % 5 == 0 || i % 7 == 0){
                res += i;
            }
        }
        return res;
    }
}

image.png

class Solution {
    public int sumOfMultiples(int n) {
        int res = 0;
        int i = 1;       
        while (i * 3 <= n){
            res += i * 3;
            // 避免重复计算 如果i中包含因子3,那么i*5=j*3*5,在i'=i/3*5会统计该数
            if (i % 3 != 0){
                if (i * 5 <= n){
                    res += i * 5;
                }
                if (i % 5 != 0 && i * 7 <= n){
                    res += i * 7;
                }
            }
            // if (i % 3 != 0 && i * 5 <= n){
            //     res += i * 5;
            // }
            // if (i % 3 != 0 && i % 5 != 0 && i * 7 <= n){
            //     res += i * 7;
            // }
            i++;
        }
        return res;
    }
}

image.png

image.pngn

实现

class Solution {
    public int sumOfMultiples(int n) {
        return f(3,n) + f(5,n) + f(7,n) - f(3*5,n) - f(3*7,n) - f(5*7,n) + f(3*5*7,n);
    }
    public int f(int x, int n){
        int m = n / x;
        return (x + m * x) * m / 2;
    }
}

image.png


目录
相关文章
|
7月前
【每日一题Day221】LC2455可被三整除的偶数的平均值 | 模拟
【每日一题Day221】LC2455可被三整除的偶数的平均值 | 模拟
55 0
|
7月前
|
算法
【每日一题Day363】LC275H 指数Ⅱ | 二分答案
【每日一题Day363】LC275H 指数Ⅱ | 二分答案
62 0
|
7月前
【每日一题Day297】LC1444切披萨的方案数 | 动态规划+二维前缀和
【每日一题Day297】LC1444切披萨的方案数 | 动态规划+二维前缀和
73 0
|
7月前
【每日一题Day170】LC1040移动石子直到连续 II | 双指针 贪心 数学
【每日一题Day170】LC1040移动石子直到连续 II | 双指针 贪心 数学
58 1
|
7月前
【每日一题Day362】LC274H 指数 | 二分答案
【每日一题Day362】LC274H 指数 | 二分答案
42 0
|
7月前
【每日一题Day184】LC2413最小偶倍数 | 数学
【每日一题Day184】LC2413最小偶倍数 | 数学
34 0
|
7月前
【每日一题Day122】LC1237找出给定方程的正整数解 | 双指针 二分查找
【每日一题Day122】LC1237找出给定方程的正整数解 | 双指针 二分查找
45 0
|
索引
每日一题 Leetcode-1499满足不等式的最大值
每日一题 Leetcode-1499满足不等式的最大值
64 0
leetcode-829. 连续整数求和(数论)
这题求连续正整数,刚好满足等差数列,可以用等差数列求和公式 n = (i + (i + k)) * (k + 1) / 2 其中i是连续正整数的首项,k是尾项和首项的差值
124 0
leetcode-829. 连续整数求和(数论)