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

(图片来源网络,侵删)
试除法(基础版)
#include <stdio.h>
#include <math.h>
int is_prime(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 (is_prime(i)) {
printf("%d ", i);
}
}
printf("\n");
return 0;
}
优化版试除法
#include <stdio.h>
#include <stdbool.h>
bool is_prime(int num) {
if (num <= 1) return false;
if (num <= 3) return true;
if (num % 2 == 0 || num % 3 == 0) return false;
for (int i = 5; i * i <= num; i += 6) {
if (num % i == 0 || num % (i + 2) == 0) {
return false;
}
}
return true;
}
int main() {
printf("100以内的素数有:\n");
for (int i = 2; i <= 100; i++) {
if (is_prime(i)) {
printf("%d ", i);
}
}
printf("\n");
return 0;
}
埃拉托斯特尼筛法(高效)
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
void sieve_of_eratosthenes(int n) {
bool prime[n + 1];
memset(prime, true, sizeof(prime));
for (int p = 2; p * p <= n; p++) {
if (prime[p]) {
for (int i = p * p; i <= n; i += p) {
prime[i] = false;
}
}
}
printf("100以内的素数有:\n");
for (int p = 2; p <= n; p++) {
if (prime[p]) {
printf("%d ", p);
}
}
printf("\n");
}
int main() {
sieve_of_eratosthenes(100);
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
方法比较
- 试除法:简单直观,但效率较低,时间复杂度为O(n√n)
- 优化试除法:通过跳过偶数和6k±1优化,效率更高
- 埃拉托斯特尼筛法:最有效的方法,时间复杂度为O(n log log n),适合求较大范围内的素数
对于100以内的素数,任何方法都足够快,但如果需要求更大范围的素数,推荐使用筛法。

(图片来源网络,侵删)
