在ubunto中使用gcc编译编写一个.c程序,求2——n的素数,n由键盘输入,循环变量分别从2到n、2到(int)sqrt(n),分别测出两个循环的所用时间。
时间: 2024-09-29 17:04:11 浏览: 47
在Ubuntu系统中使用GCC编译一个.C程序来计算2到n之间的素数并测量两个循环的时间,你需要做以下几个步骤:
1. **创建源文件**:
首先,创建一个名为`prime_checker.c`的源文件,用文本编辑器打开它,然后写下以下基本的代码结构:
```c
#include <stdio.h>
#include <math.h> // 引入数学库,用于获取平方根
// 定义判断是否为素数的函数
int is_prime(int num) {
if (num <= 1)
return 0;
for (int i = 2; i * i <= num; i++) { // 只需检查到sqrt(n)
if (num % i == 0)
return 0;
}
return 1;
}
int main() {
int n, start_time, end_time;
printf("Enter a number: ");
scanf("%d", &n);
// 获取开始时间
start_time = clock();
// 主循环查找素数
for (int i = 2; i <= n; i++) {
if (is_prime(i))
printf("%d is prime.\n", i);
}
// 获取结束时间并计算耗时
end_time = clock();
double time_taken = ((double)(end_time - start_time)) / CLOCKS_PER_SEC;
printf("\nThe loop took %f seconds.\n", time_taken);
// 测试从2到 sqrt(n) 的效率
start_time = clock();
for (int i = 2; i <= sqrt(n); i++) {
if (is_prime(i))
printf("%d is prime (optimized check).\n", i);
}
end_time = clock();
double optimized_time_taken = ((double)(end_time - start_time)) / CLOCKS_PER_SEC;
printf("Optimized loop took %f seconds.\n", optimized_time_taken);
return 0;
}
```
2. **编译与运行**:
使用终端,导航到包含`prime_checker.c`的目录,然后运行下面的命令来编译程序:
```sh
gcc prime_checker.c -o prime_checker
```
这将生成一个名为`prime_checker`的可执行文件。
3. **运行程序**:
输入你想测试的数字,然后执行:
```sh
./prime_checker
```
程序会输出结果并显示每个循环的执行时间。
阅读全文