要求输出1~20000内的所有素数,按每行5个打印出来,可以如何改进?
时间: 2024-09-21 08:03:35 浏览: 70
输入整数n,输出1~n的素数
为了输出1到20000之间的素数,并按照每行5个进行分隔打印,你可以采用一种高效的算法——埃拉托斯特尼筛法(Sieve of Eratosthenes)。这是一种查找小于一定范围内的所有质数的经典算法。以下是改进后的步骤:
1. 创建一个布尔数组isPrime,大小为20001,初始值全部设为true。因为0和1不是素数,所以索引从2开始。
2. 从2开始遍历,如果isPrime[i]为true,说明i是质数。然后将i的所有倍数(除了i本身)标记为非质数,即isPrime[j * i] = false,j从2到 sqrt(20000 / i)。
3. 遍历结束后,数组isPrime中保留了所有素数的标识。然后从最小的素数(下标从2开始)开始,每隔找到一个素数就在控制台上输出,每次输出后加5,直到达到20000或超过一行的限制。
下面是伪代码表示:
```python
def print_primes(n):
is_prime = [True] * (n + 1)
is_prime[0], is_prime[1] = False, False
for i in range(2, int(n**0.5) + 1):
if is_prime[i]:
for j in range(i*i, n+1, i):
is_prime[j] = False
count = 0
for i, prime in enumerate(is_prime[2:], 2):
if prime:
print(f"{i}", end=" ")
count += 1
if count % 5 == 0:
print() # 每打印完5个数字换行
print_primes(20000)
```
阅读全文