设计一个程序,输出所有小于等于n的素数,并分析该算法的时间复杂度
时间: 2024-09-27 13:16:09 浏览: 31
设计一个输出小于等于`n`的所有素数的简单程序,你可以使用埃拉托斯特尼筛法(Sieve of Eratosthenes),这是一种古老而有效的算法。以下是这个算法的伪代码:
```c
void sieve_of_eratosthenes(int n) {
bool is_prime[n+1]; // 创建一个布尔数组
for (int i = 0; i <= n; i++) {
is_prime[i] = true; // 初始化所有数字为质数
}
for (int p = 2; p * p <= n; p++) { // 从2开始,因为所有偶数(除了2)都不是质数
if (is_prime[p]) {
for (int i = p * p; i <= n; i += p) { // 将p的倍数标记为非质数
is_prime[i] = false;
}
}
}
for (int p = 2; p <= n; p++) {
if (is_prime[p]) {
printf("%d ", p); // 输出所有的质数
}
}
}
```
时间复杂度分析:
- 主要的时间消耗在于两层嵌套循环。外层循环从2到√n,内层循环从p²到n,每次内层循环会将p个标记设为非质数。因此,总的时间复杂度为O(n log log n),这是因为每个质数都会“消除”n/p次。
阅读全文