c语言求100以内的素数

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

C语言求100以内的素数

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

方法比较

  1. 试除法:简单直观,但效率较低,时间复杂度为O(n√n)
  2. 优化试除法:通过跳过偶数和6k±1优化,效率更高
  3. 埃拉托斯特尼筛法:最有效的方法,时间复杂度为O(n log log n),适合求较大范围内的素数

对于100以内的素数,任何方法都足够快,但如果需要求更大范围的素数,推荐使用筛法。

c语言求100以内的素数
(图片来源网络,侵删)
-- 展开阅读全文 --
头像
前台调用织梦后台栏目
« 上一篇 今天
C语言如何输出数组最大值和最小值?
下一篇 » 今天
取消
微信二维码
支付宝二维码

目录[+]