求1到n范围内能被 5 或 6 或 8 整除的数的个数。 输入 多组数据,处理到文件结尾。 每行输入一个n; 输出 输出结果,每个结果占一行。 样例输入 Copy 1000 样例输出 Copy 400 提示 1到n被6整除数的个数为n/6(取整)。
时间: 2024-12-23 17:14:14 浏览: 6
这是一个经典的求解问题,通常可以使用数学公式和一些编程技巧来解决。题目要求计算从1到n内能被5、6或8整除的数的数量,我们可以分别计算能被5、6和8整除的数,然后相加,因为这些数字是互斥的(即一个数不会同时被5、6和8整除),所以不需要减去重复的部分。
对于能被5或6整除的数,总数是n/5(向下取整)加上n/6(向下取整),因为n/5包含所有5的倍数,而n/6包含了所有6的倍数,但是会重复计数6的倍数,所以我们需要将两者的结果相加后再减去能被30(=5*6)整除的数,这是因为每增加30,就多算了两次。
对于能被8整除的数,直接计算n/8(向下取整)即可,这部分不会影响到5和6的情况。
算法步骤如下:
1. 计算能被5整除的数:n // 5
2. 计算能被6整除的数:n // 6
3. 计算能被8整除的数:n // 8
4. 能被30整除的数:n // 30
5. 总数 = (n // 5) + (n // 6) - (n // 30) + (n // 8)
下面是Python代码实现这个算法:
```python
while True:
try:
n = int(input())
if n <= 0:
break
count = n // 5 + n // 6 + n // 8 - n // 30
print(count)
except EOFError:
break
```
如果你需要生成样例输入和输出,可以用以下内容替换上述代码:
```python
# 示例输入和输出
# 样例输入
for i in range(1, 11):
print(i)
# 样例输出
for i in range(1, 11):
count = i // 5 + i // 6 + i // 8 - i // 30
print(count)
```
阅读全文