欧氏筛素数C语言代码
时间: 2024-11-06 15:12:39 浏览: 27
欧拉筛法是一种用于找到一定范围内所有质数的有效算法,它的时间复杂度比朴素的筛法更低。下面是简单的欧拉筛素数的C语言实现:
```c
#include <stdio.h>
#define MAX_N 1000000
int isMarked[MAX_N + 1];
int primes[MAX_N + 1];
void sieveOfEratosthenes(int n) {
int i, j;
for (i = 2; i <= n; i++) {
if (!isMarked[i]) {
primes[i] = i;
// 标记i的所有倍数为非质数
for (j = i * i; j <= n; j += i)
isMarked[j] = 1;
}
}
}
// 输出范围内的所有素数
void printPrimes(int start, int end) {
for (int i = start; i <= end && primes[i] != 0; i++)
printf("%d ", primes[i]);
printf("\n");
}
int main() {
int limit;
printf("Enter the range of numbers to find prime numbers: ");
scanf("%d", &limit);
sieveOfEratosthenes(limit);
printPrimes(2, limit); // 从2开始打印,因为1不是质数
return 0;
}
```
在这个代码中,`sieveOfEratosthenes()`函数首先初始化所有的数标记为未检查,然后对每个未标记的数i,如果它是质数,就将其存储到`primes[]`数组,并标记它的所有倍数。最后,`printPrimes()`函数用来打印指定范围内的素数。
阅读全文