gpt4 book ai didi

c - 优化计算特定区间内孪生数的程序

转载 作者:行者123 更新时间:2023-11-30 20:30:52 24 4
gpt4 key购买 nike

int if_no_prime(int n)
{
int prime, no_of_denominators=0;
for (int i=1;i<=n;i++)
{
if (n%i == 0)
no_of_denominators++;
}
if (no_of_denominators == 2)
prime=1;
else
prime=0;
return prime;
}

int main()
{
clock_t begin = clock();
int beginning, end, i, prime1, prime2;

printf("Enter the interval: ");
scanf(" %d %d", &beginning, &end);
for (i=beginning; i<=end; i++)
{
//here
prime1=if_no_prime(i);
if (prime1)
{
prime2=if_no_prime(i+2);
if (prime1 && prime2)
printf("The numbers %d and %d are twins\n", i, i+2);
}
}
clock_t end=clock();
double time_spent=(double)(end-begin);
printf("Compile time: %f", (double)time_spent);
return 0;
}

这段代码可以工作,但我想让它更快。当我直接插入i进行测试时,我的编译时间是3010。无论这个数字意味着什么。但是,如果我通过“here”行上的其他变量插入 i,则我的编译时间为 2431。

有人可以向我解释一下为什么直接插入值会变慢吗?c 中的计时是如何工作的?

最佳答案

正如我评论的那样:

you are mistaking compile and run times. Compiler is the time it takesto translate your C code to object code (its done before you run theprogram). And run time is the time it takes your program to execute(in this case it applies to the time it takes to perform thealgorithm).

此外,您在要求用户输入之前启动了时钟,因此您测量的时间是:用户输入字符所花费的时间 + 实际算法的时间。

最后一件事,不要使用clock()来测量需要精确度的时间。我为您提供了一个通用的实现,可以为您提供以微秒为单位的时间。

C 语言中的时间如何工作?

time.h 的 clock() 函数返回一个结构体 clock_t,其中包含自开始执行以来已滴答的当前处理器时钟数。

将其除以常量 CLOCKS_PER_SEC(通常为 1000),即可得到经过的秒数。

现在进行身份验证和其他内容

在这里,您的代码可以运行并得到改进。它更清晰、速度更快。

#include <stdio.h>
#include <sys/time.h>

double microsecs() {
struct timeval t;
if (gettimeofday(&t, NULL) < 0 ) return 0.0;
return (t.tv_usec + t.tv_sec * 1000000.0);
}

int if_no_prime(int n) {
int no_of_denominators=0;

for (int i = 1; i <= n; i++)
if (n%i==0) no_of_denominators++;

return (no_of_denominators == 2);
}


int main() {

int beginning, end, i, prime1, prime2;

printf("Enter the interval: ");
scanf(" %d %d", &beginning, &end);

double begin=microsecs();

for(i = beginning; i <= end; i++) {
//here
prime1=if_no_prime(i);

if(prime1) {
prime2 = if_no_prime(i+2);
if(prime1 && prime2) printf("The numbers %d and %d are twins\n", i, i+2);
}
}

printf("Execute time: %lf", microsecs()-begin);

return 0;
}

P.D 因为我不明白“插入”变量意味着什么,所以我无法回答这部分。只要您澄清我,我就会编辑这个答案。

关于c - 优化计算特定区间内孪生数的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53043758/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com