优化计算一定间隔内孪生数的程序

普图舍夫
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。不管那个数字是什么意思。但是如果我i通过“这里”行上的另一个变量插入,我的编译时间是 2431。

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

特雷托恩

正如我评论的那样:

你误会了编译和运行时间。编译器是将 C 代码转换为目标代码(在运行程序之前完成)所需的时间。运行时间是程序执行所需的时间(在这种情况下,它适用于执行算法所需的时间)。

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

最后一件事,不要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;
}

PD 因为我不明白什么是“插件”变量意味着我无法回答那部分。只要你澄清我,我就会编辑这个答案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

按子组计算一定间隔内的列中值的数量

来自分类Dev

在python中的一定间隔内比较列表项

来自分类Dev

避免循环检查数字是否在一定间隔内

来自分类Dev

NSDate以一定间隔包含

来自分类Dev

我如何在一定间隔内通过MATLAB找到sin(x)的最大值?

来自分类Dev

如何确保一定间隔内更新到数据库

来自分类Dev

如何在特定的时间间隔内运行函数一定次数

来自分类Dev

如何在一定间隔内通过matlab找到sin(x)的最大值?

来自分类Dev

为什么琴弦在一定间隔内没有移动?

来自分类Dev

Google表格-优化功能以在一定范围内创建笔记(非常慢)

来自分类Dev

检查在一定的时间间隔内是否加载了多个图像;如果没有,则替换为其他网址

来自分类Dev

有没有办法可以在一定的时间间隔内连续更改某些文本?

来自分类Dev

如何在Python中以一定的间隔读取行?

来自分类Dev

在一定间隔后在jLabel中更改图像

来自分类Dev

如何按一定间隔放置字符?

来自分类Dev

如何设置在python中以一定间隔重复的循环?

来自分类Dev

如何设置与Puppeteer的间隔以运行一定的时间?

来自分类Dev

在一定间隔后在jLabel中更改图像

来自分类Dev

在MATLAB中以一定间隔绘制直线

来自分类Dev

Cron任务调度并在一定间隔后停止

来自分类Dev

后台任务以一定间隔轮询外部资源

来自分类Dev

如何计算一定范围内的R中的计数

来自分类Dev

Redis:如何计算流中一定范围内的元素?

来自分类Dev

在一定范围内列出

来自分类Dev

连接一定半径内的海龟

来自分类Dev

生成并存储一定范围内的唯一和随机数

来自分类Dev

查询以查找所有时间戳,间隔超过一定间隔

来自分类Dev

如何在命令行中获取一定范围内的随机数?

来自分类Dev

XPages SSJS生成一定范围内的随机数

Related 相关文章

  1. 1

    按子组计算一定间隔内的列中值的数量

  2. 2

    在python中的一定间隔内比较列表项

  3. 3

    避免循环检查数字是否在一定间隔内

  4. 4

    NSDate以一定间隔包含

  5. 5

    我如何在一定间隔内通过MATLAB找到sin(x)的最大值?

  6. 6

    如何确保一定间隔内更新到数据库

  7. 7

    如何在特定的时间间隔内运行函数一定次数

  8. 8

    如何在一定间隔内通过matlab找到sin(x)的最大值?

  9. 9

    为什么琴弦在一定间隔内没有移动?

  10. 10

    Google表格-优化功能以在一定范围内创建笔记(非常慢)

  11. 11

    检查在一定的时间间隔内是否加载了多个图像;如果没有,则替换为其他网址

  12. 12

    有没有办法可以在一定的时间间隔内连续更改某些文本?

  13. 13

    如何在Python中以一定的间隔读取行?

  14. 14

    在一定间隔后在jLabel中更改图像

  15. 15

    如何按一定间隔放置字符?

  16. 16

    如何设置在python中以一定间隔重复的循环?

  17. 17

    如何设置与Puppeteer的间隔以运行一定的时间?

  18. 18

    在一定间隔后在jLabel中更改图像

  19. 19

    在MATLAB中以一定间隔绘制直线

  20. 20

    Cron任务调度并在一定间隔后停止

  21. 21

    后台任务以一定间隔轮询外部资源

  22. 22

    如何计算一定范围内的R中的计数

  23. 23

    Redis:如何计算流中一定范围内的元素?

  24. 24

    在一定范围内列出

  25. 25

    连接一定半径内的海龟

  26. 26

    生成并存储一定范围内的唯一和随机数

  27. 27

    查询以查找所有时间戳,间隔超过一定间隔

  28. 28

    如何在命令行中获取一定范围内的随机数?

  29. 29

    XPages SSJS生成一定范围内的随机数

热门标签

归档