C语言如何高效输出100以内所有素数?

99ANYc3cd6
预计阅读时长 8 分钟
位置: 首页 C语言 正文

C语言输出100以内的素数

以下是几种用C语言输出100以内素数的方法:

c语言输出100以内的素数
(图片来源网络,侵删)

简单判断法

#include <stdio.h>
#include <math.h>
int main() {
    int i, j;
    int isPrime;
    printf("100以内的素数有:\n");
    for (i = 2; i <= 100; i++) {
        isPrime = 1; // 假设当前数是素数
        // 检查i是否能被2到sqrt(i)之间的数整除
        for (j = 2; j <= sqrt(i); j++) {
            if (i % j == 0) {
                isPrime = 0; // 不是素数
                break;
            }
        }
        if (isPrime) {
            printf("%d ", i);
        }
    }
    return 0;
}

优化判断法(跳过偶数)

#include <stdio.h>
#include <math.h>
int main() {
    int i, j;
    printf("100以内的素数有:\n");
    printf("2 "); // 2是唯一的偶素数
    // 只检查奇数
    for (i = 3; i <= 100; i += 2) {
        int isPrime = 1;
        // 检查是否能被奇数整除
        for (j = 3; j <= sqrt(i); j += 2) {
            if (i % j == 0) {
                isPrime = 0;
                break;
            }
        }
        if (isPrime) {
            printf("%d ", i);
        }
    }
    return 0;
}

埃拉托斯特尼筛法(更高效)

#include <stdio.h>
#include <stdbool.h>
#include <string.h>
int main() {
    bool isPrime[101]; // 0-100
    memset(isPrime, true, sizeof(isPrime));
    isPrime[0] = isPrime[1] = false; // 0和1不是素数
    for (int i = 2; i * i <= 100; i++) {
        if (isPrime[i]) {
            // 将i的倍数标记为非素数
            for (int j = i * i; j <= 100; j += i) {
                isPrime[j] = false;
            }
        }
    }
    printf("100以内的素数有:\n");
    for (int i = 2; i <= 100; i++) {
        if (isPrime[i]) {
            printf("%d ", i);
        }
    }
    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以内的素数,任何方法都能快速完成。

c语言输出100以内的素数
(图片来源网络,侵删)
-- 展开阅读全文 --
头像
fm2025 dede
« 上一篇 03-26
织梦文章列表分页怎么设置?
下一篇 » 03-26
取消
微信二维码
支付宝二维码

目录[+]