n以内素数个数用c语言写时间限制在10000ms以内
时间: 2023-05-27 18:07:26 浏览: 103
java代码-使用java解决求正整数n以内的所有质数个数并给出计算时间的源代码
以下是使用筛法求n以内素数个数的C语言代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <time.h>
#define MAX_N 100000
int main(int argc, char *argv[]) {
int n;
bool is_prime[MAX_N+1] = {false};
int prime_count = 0;
clock_t start, end;
if (argc != 2) {
fprintf(stderr, "Usage: %s n\n", argv[0]);
return 1;
}
n = atoi(argv[1]);
if (n > MAX_N) {
fprintf(stderr, "n cannot be greater than %d\n", MAX_N);
return 1;
}
start = clock();
// Sieve of Eratosthenes
for (int i = 2; i <= n; i++) {
if (!is_prime[i]) {
prime_count++;
for (int j = i * 2; j <= n; j += i) {
is_prime[j] = true;
}
}
}
end = clock();
printf("Number of primes less than or equal to %d: %d\n", n, prime_count);
printf("Time taken: %.2f seconds\n", (double) (end - start) / CLOCKS_PER_SEC);
return 0;
}
```
该代码使用了布尔数组 `is_prime` 来记录每个数是否为素数,初始值都为 `false`,然后从2开始遍历到n,如果当前数是素数,则将其倍数的位置都标记为非素数,最后统计素数个数即可。
该代码的时间复杂度为O(nloglogn),可以在10000ms以内处理n<=100000的情况。如果需要处理更大的n,可以使用更高效的算法,如线性筛法。
阅读全文