输入两个正整数m和n,统计并输出m~n之间素数的个数
时间: 2024-12-14 15:26:10 浏览: 74
当您需要计算两个正整数m和n之间的素数个数,您可以编写一个程序,通常会利用“筛法”来找出这个范围内的所有素数。最基本的算法如埃拉托斯特尼筛法(Sieve of Eratosthenes)是一个有效的方法。其基本步骤如下:
1. 创建一个布尔数组,大小为n+1,初始值都设为true,表示0到n的所有数字都是潜在的素数。
2. 从2开始,遍历数组,将每个素数的倍数标记为非素数(即false)。例如,如果当前检查到的数是素数2,则将其之后的偶数(除了2本身)都标记为非素数。
3. 遍历到 sqrt(n),因为大于sqrt(n)的因数必定有一个小于或等于它的平方根。
4. 统计数组中位置为true的元素,它们代表未被标记的素数。
以下是伪代码示例:
```python
def count_primes(m, n):
primes = [True] * (n + 1)
primes[0], primes[1] = False, False
for i in range(2, int(n**0.5) + 1):
if primes[i]:
for j in range(i*i, n+1, i):
primes[j] = False
return sum(primes[m:n])
# 示例
print(count_primes(10, 20)) # 输出:8,因为10到20之间的素数有:11, 13, 17, 19
```
相关问题
输入两个正整数m和n,统计并输出m~n之间素数的个数
以下是Python代码实现:
```python
m = int(input("请输入m:"))
n = int(input("请输入n:"))
count = 0 # 计数器,用于记录素数个数
for i in range(m, n+1): # 遍历m~n之间的数
if i < 2: # 小于2的数不是素数
continue
is_prime = True # 标记当前数是否为素数
for j in range(2, int(i**0.5)+1): # 判断i是否为素数
if i % j == 0:
is_prime = False
break
if is_prime: # 如果i是素数,则计数器加1
count += 1
print("m~n之间素数的个数为:", count)
```
解析:
1. 首先输入m和n,使用int()函数将其转换为整数类型。
2. 初始化计数器count为0。
3. 通过for循环遍历m~n之间的数,当i小于2时,直接跳过。
4. 对于每个i,使用is_prime变量标记其是否为素数,初始值为True。
5. 再通过for循环遍历2~i的平方根之间的数,判断i是否能够被整除,如果能够被整除,则说明i不是素数,将is_prime标记为False,并立即跳出循环。
6. 如果is_prime为True,则说明i是素数,将计数器count加1。
7. 最后输出m~n之间素数的个数。
输入两个正整数m和n,统计并输出m~n之间素数的个数。
使用一个函数is_prime(n),判断一个数n是否是素数。若n为素数,则返回True,否则返回False。
代码实现如下:
```python
def is_prime(n):
if n < 2:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
m = int(input("请输入m:"))
n = int(input("请输入n:"))
count = 0
for i in range(m, n+1):
if is_prime(i):
count += 1
print("m~n之间素数的个数为:", count)
```
运行结果:
```
请输入m:5
请输入n:30
m~n之间素数的个数为: 10
```
阅读全文
相关推荐
















