计算m到n之间所有素数的和(Python)

题目描述

计算m到n之间所有素数的和

计算m到n之间所有素数的和,其中 2 <= m <=n <=100

输入格式:

请在这里写输入格式。例如:输入两个正整数

输出格式:

请在这里描述输出格式。例如:输出两个正整数之间的素数和。

输入样例:

在这里给出一组输入。例如:

2 10

输出样例:

在这里给出相应的输出。例如:

17


解题思路

  1. 首先,我们需要编写一个函数来检查一个数是否是素数。
  2. 然后,我们将遍历给定范围 [ m , n ] [m, n] [m,n] 内的每个整数,检查是否为素数。
  3. 如果是素数,将其添加到一个累加和的变量中。
  4. 最后,输出累加和即为所有素数的和。

值得一提的是,判断一个数 n n n 是否是素数,只需要判断 n n n 是否能被 [ 2 , n ] [2,\sqrt{n}] [2,n ] 之间的整数整除即可。

因为约数是成对出现的,而这对约数必须一个在 n \sqrt{n} n 之前,一个在 n \sqrt{n} n 之后。

n × n = n \sqrt{n}\times\sqrt{n}=n n ×n =n ,若约数都在 n \sqrt{n} n 之前的话,乘积一定小于 n n n ,同理,若都在 n \sqrt{n} n 之后的话,乘积一定大于 n n n

所以,如果在 n \sqrt{n} n 之前都找不到约数的话,那么 n \sqrt{n} n 之后就不会有了。

这是一个常见的数学优化,可以提高素数检查的效率,减少不必要的循环次数。


Python代码实现

# 判断是否为素数的函数
def is_prime(num):
    # 小于2的数不是素数
    if num < 2 :
        return False
    # 判断n能否被2到n的平方根之间的数整除
    for i in range(2, int(num ** 0.5) + 1):
        if num % i == 0:
            return False
    return True

# 输入m和n
m, n = map(int, input().split())

# 初始化素数和为0
prime_sum = 0

# 遍历从m到n的每个数,检查是否是素数并累加到素数和中
for number in range(m, n + 1):
    if is_prime(number):
        prime_sum += number

# 输出素数和
print(prime_sum)

你可能感兴趣的:(Python,python)