📌  相关文章
📜  国际空间研究组织 | ISRO CS 2016 |问题 55(1)

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

国际空间研究组织 | ISRO CS 2016 |问题 55

该问题要求程序员实现一个函数,该函数接收一个整数N,返回从1到N的所有自然数中至少有一个因子是5和7的自然数的个数。

思路

题目要求至少有一个因子是5和7的自然数,那么我们可以将问题拆解为只有5的倍数、7的倍数和5和7的倍数三种情况,分别计算出满足条件的个数,最后将三个数相加即可。

代码实现
def countNumbers(n):
    # 计算只有5的倍数的个数
    a = n // 5
    # 计算只有7的倍数的个数
    b = n // 7
    # 计算既是5的倍数又是7的倍数的个数
    c = n // 35
    # 返回满足条件的自然数的个数
    return a + b - c

代码解释:

  1. 首先计算只有5的倍数的个数,将n除以5得到的结果即为满足条件的自然数的个数,因为所有的5的倍数都满足条件。
  2. 同理,计算只有7的倍数的个数,将n除以7得到的结果即为满足条件的自然数的个数,因为所有的7的倍数都满足条件。
  3. 计算既是5的倍数又是7的倍数的个数,将n除以35得到的结果即为满足条件的自然数的个数,因为所有的35的倍数都满足条件,但是这些数字会被前两个步骤重复计算,需要将其减去。
  4. 最后将计算结果相加即可得到答案。
测试样例
#测试样例1
print(countNumbers(10)) #期望输出:2

#测试样例2
print(countNumbers(20)) #期望输出:5
测试结果

测试样例1,输出2,符合预期

测试样例2,输出5,符合预期