在编程范畴,尤其是算法跟数据构造的进修中,筛法是一种非常经典且高效的算法。它重要用于寻觅必定范畴内全部的素数。本文将深刻剖析C言语中实现的埃拉托斯特尼筛法(Eratosthenes Sieve),并探究其背后的道理跟利用。
埃拉托斯特尼筛法是一种经由过程打消法来找出必定范畴内全部素数的算法。基本头脑是从最小的素数开端,逐步打消它的倍数,剩下的即为素数。
为了进步效力,可能采取以下优化办法:
下面是利用C言语实现的埃拉托斯特尼筛法代码示例:
#include <stdio.h>
#include <math.h>
#include <string.h>
void Eratosthenes(int n) {
int *isPrime = (int *)malloc((n + 1) * sizeof(int));
memset(isPrime, 1, (n + 1) * sizeof(int));
for (int i = 2; i <= sqrt(n); i++) {
if (isPrime[i]) {
for (int j = i * i; j <= n; j += i) {
isPrime[j] = 0;
}
}
}
for (int i = 2; i <= n; i++) {
if (isPrime[i]) {
printf("%d ", i);
}
}
printf("\n");
free(isPrime);
}
int main() {
int n;
printf("Enter the upper limit for prime numbers: ");
scanf("%d", &n);
if (n < 2) {
printf("The number must be greater than 1.\n");
return 0;
}
Eratosthenes(n);
return 0;
}
isPrime
数组用于标记每个数能否为素数。memset
初始化数组,全部数都标记为素数。埃拉托斯特尼筛法是一种简单而高效的算法,实用于寻觅必定范畴内的全部素数。经由过程C言语实现该算法,可能帮助我们更好地懂得其道理,并在现实编程中利用这一技能。