首页 > 解决方案 > 相同的 C 程序但不同的执行时间

问题描述

我编写了一个 C 程序来找出给定参数中的素数。但是对于相同的输入输出,程序的执行时间不同。

#include <stdio.h>

int main(int argc, char const *argv[])
{
    int n,p,k;
    scanf("%d", &n);
    int prime[n+1];
    for (p = 2; p <= n; ++p)
    {
        if (prime[p]!=-1)
        {
            for (int i = p*2,k=2; i < n; k++,i=k*p)
            {
                prime[i]=-1;
            }
        }
    }
    for (int i = 1; i < n ; ++i)
    {
        if (prime[i]!=-1)
        {
            printf("%d  ",i );
        }
    }
return 0;
}

在此处输入图像描述

在此处输入图像描述

标签: c

解决方案


您正在测量的是用户输入输入所花费的时间,即 200。

在任何现代计算机上,在给出输入后计算结果都不会花费 2 到 5 秒。

确实,“计算机可能正在做其他事情”,因此会给出不同的执行时间——但这不会让你像这样的代码增加 3 秒。

为了使测量更可靠,您需要“删除”用户输入,即删除scanf.

而不是scanf您应该将值n作为命令行参数。

使用类似的代码

// scanf("%d", &n); Dont use scanf but use lines like the two below.
if (argc < 2) exit(1); // user error - no number given
n = atoi(argv[1]);     // convert command line arg to integer

并像这样启动程序:

test2.exe 200

现在测量的时间将远小于 2-5 秒,您不会看到执行时间变化如此之大。

注意:虽然atoi使用起来很简单,但通常使用起来会更好strtol


推荐阅读