编写一个程序 求1-n的素数个数,给出两种解法
时间: 2024-09-09 07:07:03 浏览: 91
编写程序求1到n之间素数的个数,可以通过多种方法实现。以下是两种常见的解法:
1. 暴力法(Brute Force Method):
暴力法的基本思想是检查每个数是否为素数。对于1到n之间的每个数,遍历从2到该数的平方根的所有整数,如果没有任何一个数能整除它,则该数是素数。
```python
def count_primes_bruteforce(n):
prime_count = 0
for num in range(2, n+1):
is_prime = True
for i in range(2, int(num**0.5) + 1):
if num % i == 0:
is_prime = False
break
if is_prime:
prime_count += 1
return prime_count
```
2. 埃拉托斯特尼筛法(Sieve of Eratosthenes):
埃拉托斯特尼筛法是一种更高效的算法,基本思路是从2开始,将每个素数的倍数从列表中删除,剩下的就是素数。
```python
def count_primes_sieve(n):
sieve = [True] * (n + 1)
sieve[0] = sieve[1] = False
for i in range(2, int(n**0.5) + 1):
if sieve[i]:
for j in range(i*i, n + 1, i):
sieve[j] = False
prime_count = sum(sieve)
return prime_count
```
这两种方法各有优缺点,暴力法简单易懂,适合较小的n值;埃拉托斯特尼筛法虽然实现较为复杂,但效率更高,适合较大的n值。
阅读全文