素数是指大于1的自然数,除了1和它本身以外,没有任何其他因数的数。为了找到1到100之间的所有素数。C语言中,输出1到100之间的所有素数有多种方法。

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));  // 初始化数组为1,表示所有数都是素数
    
    isPrime[0] = isPrime[1] = 0;  // 0和1不是素数
    
    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;
}

推荐文档

相关文档

大家感兴趣的内容

随机列表