用C语言生成一个按顺序排列的素数数组
时间: 2024-11-13 15:21:10 浏览: 9
生成一个按顺序排列的素数数组可以使用Sieve of Eratosthenes算法。这是一个经典的方法,通过不断地排除合数,找到所有小于或等于给定最大值的素数。下面是C语言的一个简单实现:
```c
#include <stdio.h>
#include <stdbool.h>
#define MAX_PRIMES 1000
// 判断一个数是否是素数
bool isPrime(int num) {
if (num <= 1)
return false;
for (int i = 2; i * i <= num; i++) {
if (num % i == 0)
return false;
}
return num > 1;
}
// 使用Sieve of Eratosthenes生成素数数组
void generatePrimeArray(int limit, int primes[]) {
bool marked[MAX_PRIMES + 1]; // 布尔数组记录每个数是否是素数
memset(marked, true, sizeof(marked));
for (int p = 2; p * p <= limit; p++) {
// 如果p是素数,那么它之前的数都是素数
if (marked[p])
for (int i = p * p; i <= limit; i += p)
marked[i] = false;
}
int index = 0;
for (int p = 2; p <= limit; p++) {
if (marked[p])
primes[index++] = p;
}
}
int main() {
int max_num = 50; // 需要获取的最大的素数
int primes[max_num];
generatePrimeArray(max_num, primes);
printf("Sorted array of prime numbers up to %d are:\n", max_num);
for (int i = 0; i < index; i++) {
printf("%d ", primes[i]);
}
return 0;
}
```
在这个代码中,`generatePrimeArray` 函数首先创建了一个布尔数组 `marked[]`,然后标记出每个数是否是素数。最后,数组 `primes[]` 存储了所有小于或等于 `max_num` 的素数。
阅读全文