输入两个正整数a, b,输出大于等于a,小于等于b的能被3,5,7整除的数的个数
时间: 2023-05-13 12:06:21 浏览: 168
这个问题可以用数学方法解决。我们可以先计算出大于等于1,小于等于b的能被3整除的数的个数,再计算出能被5和7整除的数的个数,最后用容斥原理计算出能被3,5,7整除的数的个数。
设能被3整除的数的个数为x1,能被5整除的数的个数为x2,能被7整除的数的个数为x3,能被3和5整除的数的个数为x4,能被3和7整除的数的个数为x5,能被5和7整除的数的个数为x6,能被3,5,7整除的数的个数为x7。
根据容斥原理,能被3,5,7整除的数的个数为:
x7 = b/3 - (a-1)/3 - (b/5 - (a-1)/5) - (b/7 - (a-1)/7) + (b/15 - (a-1)/15) + (b/21 - (a-1)/21) + (b/35 - (a-1)/35)
其中,b/3表示小于等于b的能被3整除的数的个数,(a-1)/3表示小于a的能被3整除的数的个数,b/5表示小于等于b的能被5整除的数的个数,(a-1)/5表示小于a的能被5整除的数的个数,b/7表示小于等于b的能被7整除的数的个数,(a-1)/7表示小于a的能被7整除的数的个数,b/15表示小于等于b的能被3和5整除的数的个数,(a-1)/15表示小于a的能被3和5整除的数的个数,b/21表示小于等于b的能被3和7整除的数的个数,(a-1)/21表示小于a的能被3和7整除的数的个数,b/35表示小于等于b的能被5和7整除的数的个数,(a-1)/35表示小于a的能被5和7整除的数的个数。
因此,我们只需要用代码实现上述公式即可得到答案。以下是代码实现:
def count_divisible_numbers(a, b):
x1 = b // 3 - (a-1) // 3
x2 = b // 5 - (a-1) // 5
x3 = b // 7 - (a-1) // 7
x4 = b // 15 - (a-1) // 15
x5 = b // 21 - (a-1) // 21
x6 = b // 35 - (a-1) // 35
x7 = x1 + x2 + x3 - x4 - x5 - x6
return x7
a = int(input("请输入a:"))
b = int(input("请输入b:"))
print("大于等于a,小于等于b的能被3,5,7整除的数的个数为:", count_divisible_numbers(a, b))
阅读全文