c语言怎么高效求素数
以下是一种高效的求素数的方法:
-
定义一个布尔类型数组is_prime,长度为n+1,表示从0到n的每个数字是否为素数。初始化为true。
-
从2开始循环到n,如果当前数字i为素数(即is_prime[i]为true),则将i的所有倍数(除了i本身)标记为非素数(即将is_prime[j]置为false,其中j为i的倍数)。
-
最终,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)。
原文地址: https://www.cveoy.top/t/topic/bTE5 著作权归作者所有。请勿转载和采集!