编程c语言从一个整数数组中筛选出所有的质数(素数)?
时间: 2024-10-22 11:22:37 浏览: 38
在C语言中,筛选出数组中的所有质数通常会采用埃拉托斯特尼筛法(Sieve of Eratosthenes),这是一种经典算法,用于找出一定范围内的所有质数。以下是基本步骤:
1. 首先,创建一个与输入数组长度相同的布尔型数组`isPrime`,并将所有元素初始化为`true`。这将表示每个数字最初都被认为可能是质数。
2. 对于数组的第一个元素(通常是2,因为最小的质数是2),如果它的`isPrime`值为`true`,则标记它的所有倍数(从2开始,每次加它本身)为非质数,然后将`isPrime[2]`设置为`false`。
3. 遍历从3到数组最大值的所有数字,对于每一个数`i`(如果`isPrime[i]`为`true`),找到它的第一个未被标记的倍数,并将其及其之后的所有倍数都标记为非质数。
4. 最后,遍历原始数组,将那些在`isPrime`数组中对应的索引处`isPrime`值为`true`的元素添加到结果数组中,即它们是质数。
```c
#include <stdio.h>
#include <stdbool.h>
void sieveOfEratosthenes(int arr[], int n) {
bool isPrime[n];
memset(isPrime, true, sizeof(isPrime));
for (int i = 2; i * i <= n; i++) {
if (isPrime[i]) {
for (int j = i * i; j <= n; j += i) {
isPrime[j] = false;
}
}
}
int primeCount = 0;
for (int i = 0; i < n; i++) {
if (isPrime[i] && arr[i] > 1) {
printf("%d ", arr[i]);
primeCount++;
}
}
}
// 示例用法
int main() {
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int n = sizeof(arr) / sizeof(arr[0]);
sieveOfEratosthenes(arr, n);
return 0;
}
```
阅读全文