📜  计算没有特定数字的n个数字(1)

📅  最后修改于: 2023-12-03 14:57:33.433000             🧑  作者: Mango

计算没有特定数字的n个数字

在编程中,常常需要计算一定范围内没有特定数字的n个数字。例如,计算1到100中除了3和5的倍数以外所有数字之和。以下介绍几种解决方案。

方法一:暴力枚举

暴力枚举是最简单的思路,即遍历每一个数字,判断是否为特定数字的倍数,如果不是则加入累加器中。

def sum_without_multiples(n, a, b):
    sum = 0
    for i in range(1, n+1):
        if i % a != 0 and i % b != 0:
            sum += i
    return sum

其中,n表示范围,a和b分别表示特定数字。

方法二:容斥原理

容斥原理是一种常用的计数方法,用于计算多个集合的交集和并集。对于本题,可以利用容斥原理计算出包含特定数字的总和,再减去同时包含两个特定数字的总和,最后再加上同时包含三个特定数字的总和。

def sum_without_multiples(n, a, b):
    sum = 0
    sum_a = (n - 1) // a * (a + n - 1) // 2
    sum_b = (n - 1) // b * (b + n - 1) // 2
    sum_ab = (n - 1) // (a * b) * (a * b + n - 1) // 2
    sum = n * (n + 1) // 2 - sum_a - sum_b + sum_ab
    return sum

其中,n表示范围,a和b分别表示特定数字。注意要使用整除符号"//".

方法三:数学公式

对于一定范围内没有特定数字的n个数字之和,也有数学公式可用。

def sum_without_multiples(n, a, b):
    sum = 0
    sum_a = (n - 1) // a * (a + n - 1) // 2
    sum_b = (n - 1) // b * (b + n - 1) // 2
    sum_ab = (n - 1) // (a * b) * (a * b + n - 1) // 2
    sum = n * (n + 1) // 2 - sum_a - sum_b + sum_ab
    return sum

其中,n表示范围,a和b分别表示特定数字。

以上便是三种解决方案,根据具体情况可选择不同方法。