以下是一种高效的求素数的方法:

  1. 定义一个布尔类型数组is_prime,长度为n+1,表示从0到n的每个数字是否为素数。初始化为true。

  2. 从2开始循环到n,如果当前数字i为素数(即is_prime[i]为true),则将i的所有倍数(除了i本身)标记为非素数(即将is_prime[j]置为false,其中j为i的倍数)。

  3. 最终,is_prime数组中为true的数字即为素数。

代码示例:

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

void sieve_of_eratosthenes(int n) {
    bool is_prime[n+1];
    for (int i = 2; i <= n; i++) {
        is_prime[i] = true;
    }
    for (int i = 2; i <= n; i++) {
        if (is_prime[i]) {
            printf("%d ", i);
            for (int j = i*i; j <= n; j += i) {
                is_prime[j] = false;
            }
        }
    }
}

int main() {
    int n = 100;
    sieve_of_eratosthenes(n);
    return 0;
}

该算法的时间复杂度为O(nloglogn),空间复杂度为O(n)。

c语言怎么高效求素数

原文地址: https://www.cveoy.top/t/topic/bTE5 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录