使用c语言编写一个程序 exp2-3.cpp,求1-n 的素数个数,在主函数中输人n,并仿照第一题输出所用时间。
时间: 2024-09-22 22:03:37 浏览: 48
C语言编程实验sy2-2.c
5星 · 资源好评率100%
在C语言中编写一个程序来计算从1到n之间的素数个数,我们可以使用埃拉托斯特尼筛法(Sieve of Eratosthenes)。这个算法遍历每个数字,如果它是素数,则删除它的所有倍数,直到达到给定的最大值n。以下是`exp2-3.cpp`的一个简单实现:
```cpp
#include <stdio.h>
#include <time.h>
// 判断是否为素数的辅助函数
int is_prime(int num) {
if (num <= 1)
return 0;
for (int i = 2; i * i <= num; i++) {
if (num % i == 0)
return 0;
}
return 1;
}
// 计算1到n的素数个数
int count_primes(int n) {
int count = 0;
bool* prime_flags = new bool[n + 1]; // 素数标志数组
for (int i = 2; i <= n; i++) {
if (!prime_flags[i]) { // 如果i还未标记为非素数
count++;
// 标记i的所有倍数为非素数
for (int j = i * i; j <= n; j += i)
prime_flags[j] = true;
}
}
delete[] prime_flags; // 释放内存
return count;
}
int main() {
int n;
clock_t start_time, end_time;
printf("请输入一个整数n: ");
scanf("%d", &n);
// 开始计时
start_time = clock();
int primes_count = count_primes(n);
printf("从1到%d的素数个数为:%d\n", n, primes_count);
// 结束计时并计算所用时间
end_time = clock();
double time_spent = ((double)(end_time - start_time)) / CLOCKS_PER_SEC;
printf("计算所用时间为:%.6f秒.\n", time_spent);
return 0;
}
```
在这个程序中,我们首先检查输入的整数n是否大于1,然后使用埃拉托斯特尼筛选法找出所有小于等于n的素数,并统计个数。同时,我们还记录了整个过程的时间消耗。
阅读全文