【问题标题】:Why is the difference in running time so long between these two codes?为什么这两个代码的运行时间差异如此之大?
【发布时间】:2014-03-08 12:22:31
【问题描述】:

对于这两个代码 l 最初都是 1 ,除了数组之外的所有变量都是 long long ,数组是大小为 N 的全局 int 。N 大约为 10^6。但是代码 1 超过了 5 秒的时间限制,但代码 2 以毫秒为单位运行。唯一的区别在于最后一行。 a,b,c 是小于 50 的整数变量。

使用的编译器:- g++

测试用例:- 3000000 50 50 50 1 (N,a,b,c,l)

代码1:-

for(i=1;i<N;i++)
    {
        j=l;
        k=(j*j)%1000000;
        k=(a*k)%1000000;
        j=(b*j)%1000000;
        l=(j+k+c)%1000000;


        x=(int)l;
        ar[i]=x;
    } 

代码2:-

for(i=1;i<N;i++)
    {
        j=l;
        k=(j*j)%1000000;
        k=(a*k)%1000000;
        j=(b*j)%1000000;
        l=(j+k+c)%1000000;


        x=(int)l;
        ar[i]=1;
    }

【问题讨论】:

  • 这些时间是多次运行的平均值还是仅一次?
  • 您使用的是哪个编译器?你启用优化了吗?
  • 你应该发布一个测试用例。未知数太多,无法得出任何有意义的结论。
  • @OMGtechy g++ 编译器,是的,优化已启用。

标签: c++


【解决方案1】:

这是编译器的优化。可能第二个代码只是替换为

for(i=1;i<N;i++)
{
    ar[i]=1;
}

【讨论】:

  • 可能甚至懒得计算l
猜你喜欢
  • 2019-09-13
  • 1970-01-01
  • 2021-05-27
  • 2011-12-03
  • 1970-01-01
  • 2021-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多