一个自然数除了 1 和它本身以外没有其他因数,那么它就是一个素数。要检查一个数是否是素数,可以使用不同的方法来实现。

1、简单迭代

#include <stdio.h>
#include <stdbool.h>

bool isPrime1(int n) {
    if (n <= 1) return false;
    for (int i = 2; i < n; i++) {
        if (n % i == 0) return false;
    }
    return true;
}

int main() {
    int num;
    printf("请输入一个整数: ");
    scanf("%d", &num);

    if (isPrime1(num))
        printf("%d 是素数。\n", num);
    else
        printf("%d 不是素数。\n", num);

    return 0;
}

2、迭代到平方根

#include <stdio.h>
#include <stdbool.h>
#include <math.h>

bool isPrime2(int n) {
    if (n <= 1) return false;
    for (int i = 2; i <= sqrt(n); i++) {
        if (n % i == 0) return false;
    }
    return true;
}

int main() {
    int num;
    printf("请输入一个整数: ");
    scanf("%d", &num);

    if (isPrime2(num))
        printf("%d 是素数。\n", num);
    else
        printf("%d 不是素数。\n", num);

    return 0;
}

3、优化的平方根迭代

#include <stdio.h>
#include <stdbool.h>
#include <math.h>

bool isPrime3(int n) {
    if (n <= 1) return false;
    if (n <= 3) return true;
    if (n % 2 == 0 || n % 3 == 0) return false;
    for (int i = 5; i * i <= n; i += 6) {
        if (n % i == 0 || n % (i + 2) == 0) return false;
    }
    return true;
}

int main() {
    int num;
    printf("请输入一个整数: ");
    scanf("%d", &num);

    if (isPrime3(num))
        printf("%d 是素数。\n", num);
    else
        printf("%d 不是素数。\n", num);

    return 0;
}

4、埃拉托斯特尼筛法(适用于寻找多个素数)

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

void sieveOfEratosthenes(int n) {
    bool *prime = malloc((n + 1) * sizeof(bool));
    for (int i = 0; i <= n; i++) prime[i] = true;

    for (int p = 2; p * p <= n; p++) {
        if (prime[p]) {
            for (int i = p * p; i <= n; i += p) prime[i] = false;
        }
    }

    for (int p = 2; p <= n; p++) {
        if (prime[p]) printf("%d ", p);
    }
    free(prime);
}

int main() {
    int num;
    printf("请输入一个整数: ");
    scanf("%d", &num);
    printf("小于等于 %d 的素数有: ", num);
    sieveOfEratosthenes(num);
    printf("\n");

    return 0;
}

5、判断多个数字是否为素数(批量检测)

#include <stdio.h>
#include <stdbool.h>

bool isPrime5(int n) {
    if (n <= 1) return false;
    if (n <= 3) return true;
    if (n % 2 == 0 || n % 3 == 0) return false;
    for (int i = 5; i * i <= n; i += 6) {
        if (n % i == 0 || n % (i + 2) == 0) return false;
    }
    return true;
}

int main() {
    int nums[] = {2, 3, 4, 5, 16, 17, 18, 19, 20, 23};
    int size = sizeof(nums) / sizeof(nums[0]);

    for (int i = 0; i < size; i++) {
        if (isPrime5(nums[i]))
            printf("%d 是素数。\n", nums[i]);
        else
            printf("%d 不是素数。\n", nums[i]);
    }

    return 0;
}

推荐文档

相关文档

大家感兴趣的内容

随机列表