计算m到n之间所有素数的和,其中 2 <= m <=n <=100
请在这里写输入格式。例如:输入两个正整数
请在这里描述输出格式。例如:输出两个正整数之间的素数和。
在这里给出一组输入。例如:
2 10
在这里给出相应的输出。例如:
17
值得一提的是,判断一个数 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 之后就不会有了。
这是一个常见的数学优化,可以提高素数检查的效率,减少不必要的循环次数。
# 判断是否为素数的函数
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)