C语言如何判断一个数是否为质数?

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

判断一个数是否为质数的C语言实现

质数是指大于1的自然数,除了1和它本身外,不能被其他自然数整除的数,以下是几种在C语言中判断质数的方法:

判断一个数是否为质数c语言
(图片来源网络,侵删)

方法1:简单试除法

#include <stdio.h>
#include <stdbool.h>
bool isPrime(int num) {
    if (num <= 1) {
        return false;
    }
    for (int i = 2; i < num; i++) {
        if (num % i == 0) {
            return false;
        }
    }
    return true;
}
int main() {
    int num;
    printf("请输入一个整数: ");
    scanf("%d", &num);
    if (isPrime(num)) {
        printf("%d 是质数\n", num);
    } else {
        printf("%d 不是质数\n", num);
    }
    return 0;
}

方法2:优化试除法(只需检查到平方根)

#include <stdio.h>
#include <stdbool.h>
#include <math.h>
bool isPrime(int num) {
    if (num <= 1) {
        return false;
    }
    if (num == 2) {
        return true;
    }
    if (num % 2 == 0) {
        return false;
    }
    int sqrtNum = sqrt(num) + 1;
    for (int i = 3; i <= sqrtNum; i += 2) {
        if (num % i == 0) {
            return false;
        }
    }
    return true;
}
int main() {
    int num;
    printf("请输入一个整数: ");
    scanf("%d", &num);
    if (isPrime(num)) {
        printf("%d 是质数\n", num);
    } else {
        printf("%d 不是质数\n", num);
    }
    return 0;
}

方法3:埃拉托斯特尼筛法(适合判断多个数是否为质数)

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <math.h>
void sieveOfEratosthenes(int n) {
    bool *isPrime = (bool *)malloc((n + 1) * sizeof(bool));
    for (int i = 0; i <= n; i++) {
        isPrime[i] = true;
    }
    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("小于等于 %d 的质数有: ", n);
    for (int p = 2; p <= n; p++) {
        if (isPrime[p]) {
            printf("%d ", p);
        }
    }
    printf("\n");
    free(isPrime);
}
int main() {
    int n;
    printf("请输入一个整数: ");
    scanf("%d", &n);
    sieveOfEratosthenes(n);
    return 0;
}

注意事项

  1. 方法1是最简单的实现,但对于大数效率较低
  2. 方法2通过检查到平方根和跳过偶数大大提高了效率
  3. 方法3适合需要判断多个数是否为质数的场景
  4. 对于非常大的数(如超过10^9),可能需要更高级的算法或使用大数库

选择哪种方法取决于你的具体需求和输入数字的范围。

判断一个数是否为质数c语言
(图片来源网络,侵删)
-- 展开阅读全文 --
头像
c语言求三角形的面积和周长
« 上一篇 03-05
织梦调用标题字数限制
下一篇 » 03-05
取消
微信二维码
支付宝二维码

目录[+]