动态数组c语言素数判断
时间: 2025-01-04 10:25:53 浏览: 6
### 动态数组实现素数判断
在C语言中,可以使用`malloc()`函数来分配动态内存创建动态数组。对于素数判断的任务,首先定义一个用于检测给定数值是否为素数的辅助函数[^2]。
#### 辅助函数 `isPrime`
此函数接收一个整型参数并返回布尔类型的值表示该数是否为素数:
```c
int isPrime(int num) {
if (num <= 1 || (num % 2 == 0 && num != 2))
return 0;
for (int i = 3; i * i <= num; i += 2) { // 使用 sqrt 提高效率
if (num % i == 0)
return 0;
}
return 1;
}
```
接着,在主程序部分初始化必要的变量,并通过调用`malloc()`根据用户指定的数量分配足够的空间存储可能存在的素数列表[^4]。
#### 主程序逻辑
下面展示了一个完整的例子,其中包含了动态数组的应用以及素数查找的过程:
```c
#include <stdio.h>
#include <stdlib.h>
// ... 上面已经给出的 isPrime 函数 ...
int main() {
int n, count = 0;
printf("请输入要检查的最大范围内的正整数:");
scanf("%d", &n);
// 创建指向指针 p 的动态数组
int* primes = (int*)malloc(n * sizeof(int));
if (!primes) {
fprintf(stderr, "内存不足");
exit(1);
}
// 遍历从2到n之间的每一个自然数
for (int i = 2; i <= n; ++i) {
if (isPrime(i)) {
*(primes + count++) = i;
}
}
// 打印找到的所有素数及其数量
printf("范围内共有%d个素数:\n", count);
for (int j = 0; j < count; ++j) {
printf("%d ", primes[j]);
}
putchar('\n');
free(primes); // 记得释放之前申请过的堆上资源
return 0;
}
```
上述代码实现了基于动态数组结构下的素数筛选功能,不仅提高了灵活性还增强了性能表现。注意这里采用了更高效的平方根优化策略来进行除法测试以减少不必要的运算次数。
阅读全文