C语言输出100以内的素数
以下是使用C语言输出100以内所有素数的几种常见方法:

(图片来源网络,侵删)
基本判断法
#include <stdio.h>
#include <math.h>
int isPrime(int num) {
if (num <= 1) return 0;
if (num == 2) return 1;
if (num % 2 == 0) return 0;
for (int i = 3; i <= sqrt(num); i += 2) {
if (num % i == 0) {
return 0;
}
}
return 1;
}
int main() {
printf("100以内的素数有:\n");
for (int i = 2; i <= 100; i++) {
if (isPrime(i)) {
printf("%d ", i);
}
}
printf("\n");
return 0;
}
埃拉托斯特尼筛法(更高效)
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
void sieveOfEratosthenes(int n) {
bool isPrime[n+1];
memset(isPrime, true, sizeof(isPrime));
isPrime[0] = isPrime[1] = false;
for (int p = 2; p * p <= n; p++) {
if (isPrime[p]) {
for (int i = p * p; i <= n; i += p) {
isPrime[i] = false;
}
}
}
printf("100以内的素数有:\n");
for (int p = 2; p <= n; p++) {
if (isPrime[p]) {
printf("%d ", p);
}
}
printf("\n");
}
int main() {
sieveOfEratosthenes(100);
return 0;
}
优化版判断法
#include <stdio.h>
int main() {
printf("100以内的素数有:\n");
for (int num = 2; num <= 100; num++) {
int isPrime = 1;
for (int i = 2; i * i <= num; i++) {
if (num % i == 0) {
isPrime = 0;
break;
}
}
if (isPrime) {
printf("%d ", num);
}
}
printf("\n");
return 0;
}
输出结果
任何一种方法都会输出相同的结果:
100以内的素数有:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
方法比较
- 基本判断法:简单直观,但对于大数效率较低
- 埃拉托斯特尼筛法:效率最高,适合找出一定范围内的所有素数
- 优化版判断法:比基本判断法更高效,但不如筛法
对于100以内的素数,任何方法都可以快速完成,但如果范围更大(如10000以内),推荐使用筛法。
