c语言输出100以内素数

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

C语言输出100以内的素数

以下是使用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 

方法比较

  1. 基本判断法:简单直观,但对于大数效率较低
  2. 埃拉托斯特尼筛法:效率最高,适合找出一定范围内的所有素数
  3. 优化版判断法:比基本判断法更高效,但不如筛法

对于100以内的素数,任何方法都可以快速完成,但如果范围更大(如10000以内),推荐使用筛法。

-- 展开阅读全文 --
头像
织梦文章时间为何无法保存?
« 上一篇 今天
织梦首页如何调用文章简介?
下一篇 » 今天
取消
微信二维码
支付宝二维码

目录[+]