1、简单的遍历和标志位
#include <stdio.h>
int main() {
    int i, j, isPrime;
    
    printf("1到100之间的素数:\n");
    for (i = 2; i <= 100; i++) {
        isPrime = 1;
        for (j = 2; j <= i / 2; j++) {
            if (i % j == 0) {
                isPrime = 0;
                break;
            }
        }
        if (isPrime == 1) {
            printf("%d ", i);
        }
    }
    
    return 0;
}
2、使用开平方来优化
#include <stdio.h>
#include <math.h>
int main() {
    int i, j, isPrime;
    
    printf("1到100之间的素数:\n");
    for (i = 2; i <= 100; i++) {
        isPrime = 1;
        for (j = 2; j <= sqrt(i); j++) {
            if (i % j == 0) {
                isPrime = 0;
                break;
            }
        }
        if (isPrime == 1) {
            printf("%d ", i);
        }
    }
    
    return 0;
}
3、埃拉托斯特尼筛法
#include <stdio.h>
#include <string.h>
int main() {
    int n = 100;
    int isPrime[n+1];
    
    memset(isPrime, 1, sizeof(isPrime));  
    
    isPrime[0] = isPrime[1] = 0;  
    
    for (int i = 2; i * i <= n; i++) {
        if (isPrime[i]) {
            for (int j = i * i; j <= n; j += i) {
                isPrime[j] = 0;
            }
        }
    }
    
    printf("1到100之间的素数:\n");
    for (int i = 2; i <= n; i++) {
        if (isPrime[i]) {
            printf("%d ", i);
        }
    }
    
    return 0;
}
4、递归判断素数
#include <stdio.h>
int isPrime(int n, int i) {
    if (n <= 2) {
        return (n == 2) ? 1 : 0;
    }
    if (n % i == 0) {
        return 0;
    }
    if (i * i > n) {
        return 1;
    }
    return isPrime(n, i + 1);
}
int main() {
    printf("1到100之间的素数:\n");
    for (int i = 2; i <= 100; i++) {
        if (isPrime(i, 2)) {
            printf("%d ", i);
        }
    }
    
    return 0;
}
5、用数组标记已处理过的数字
#include <stdio.h>
#include <stdbool.h>
int main() {
    bool isPrime[101];
    
    for (int i = 0; i <= 100; i++) {
        isPrime[i] = true;
    }
    
    for (int i = 2; i <= 100; i++) {
        if (isPrime[i]) {
            for (int j = 2 * i; j <= 100; j += i) {
                isPrime[j] = false;
            }
        }
    }
    
    printf("1到100之间的素数:\n");
    for (int i = 2; i <= 100; i++) {
        if (isPrime[i]) {
            printf("%d ", i);
        }
    }
    
    return 0;
}