📅  最后修改于: 2023-12-03 15:25:22.861000             🧑  作者: Mango
本程序用于计算小于或等于N的A,B或C的倍数的个数。
输入3个非负整数N,A,B,C,其中A,B,C至少有一个不为0,程序将输出小于或等于N的A,B或C的倍数的个数。
本程序使用容斥原理,通过计算单个数的倍数、两个数的公倍数、三个数的公倍数,找出小于或等于N的A,B或C的倍数的个数。具体方法如下:
输入:
N = 20
A = 3
B = 5
C = 7
输出:
7
def gcd(a, b):
while b:
a, b = b, a % b
return a
def lcm(a, b):
return a // gcd(a, b) * b
def count_multiples(n, a):
return n // a
def count_common_multiples(n, a, b):
return count_multiples(n, a) + count_multiples(n, b) - count_multiples(n, lcm(a, b))
def count_total_multiples(n, a, b, c):
ab_lcm = lcm(a, b)
ac_lcm = lcm(a, c)
bc_lcm = lcm(b, c)
abc_lcm = lcm(ab_lcm, c)
return count_multiples(n, a) + count_multiples(n, b) + count_multiples(n, c) \
- count_common_multiples(n, a, b) - count_common_multiples(n, a, c) - count_common_multiples(n, b, c) \
+ count_multiples(n, abc_lcm)
以上是 Python 实现方式,其他语言也可以实现类似的算法。