目前最快的计算素数个数的c语言代码
时间: 2023-03-03 11:22:27 浏览: 121
计算素数个数的算法有很多种,不同的算法效率也不同。但是目前最快的算法之一是埃拉托斯特尼筛法(Sieve of Eratosthenes),它可以在O(nloglogn)的时间复杂度内计算出n以内的所有素数。
以下是一个用C语言实现埃拉托斯特尼筛法的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int count_primes(int n) {
if (n < 2) {
return 0;
}
bool *is_prime = (bool *) malloc((n+1) * sizeof(bool));
for (int i = 2; i <= n; i++) {
is_prime[i] = true;
}
int count = 0;
for (int i = 2; i <= n; i++) {
if (is_prime[i]) {
count++;
for (int j = 2*i; j <= n; j += i) {
is_prime[j] = false;
}
}
}
free(is_prime);
return count;
}
int main() {
int n = 1000000;
int count = count_primes(n);
printf("There are %d primes less than or equal to %d.\n", count, n);
return 0;
}
```
这个程序会计算出小于等于1000000的素数个数,并输出结果。该程序使用了动态内存分配来创建一个bool类型的数组is_prime,用于记录每个数是否为素数。具体实现方法是,首先将is_prime数组中所有的值初始化为true,然后从2开始遍历到n,如果当前数i为素数,则将is_prime数组中2i、3i、4i...等位置上的值设置为false。最后遍历一遍is_prime数组,统计其中值为true的个数,即为小于等于n的素数个数。
阅读全文