设计一个C程序,输出所有小于等于n的素数,并分析该算法的时间复杂度
时间: 2024-10-08 19:24:27 浏览: 35
设计一个简单的C程序,可以利用循环和条件判断来找出所有小于等于给定整数`n`的所有素数:
```c
#include <stdio.h>
// 判断是否为素数的函数
int is_prime(int num) {
if (num <= 1) return 0;
for (int i = 2; i * i <= num; i++) {
if (num % i == 0) return 0;
}
return 1;
}
// 输出所有小于等于n的素数
void print_primes(int n) {
for (int i = 2; i <= n; i++) {
if (is_prime(i)) {
printf("%d ", i);
}
}
printf("\n");
}
int main() {
int n;
printf("请输入一个正整数: ");
scanf("%d", &n);
printf("小于等于%d的素数有:\n", n);
print_primes(n);
return 0;
}
```
这个程序首先检查每个数字是否大于1,然后从2开始遍历到`sqrt(n)`,如果能被其他数字整除,则不是素数;否则就是素数。时间复杂度分析:
- `is_prime` 函数内部有一个循环,其迭代次数最多是`n`的平方根次(因为大于`sqrt(n)`的因子必然有一个小于或等于它),所以时间复杂度是O(sqrt(n))。
- 主函数中外部的循环会调用`is_prime`对每个数字执行一次,因此整体时间复杂度是O(n * sqrt(n))。
阅读全文