对于两个代码l最初为1,除数组之外的所有变量都是long long,array是大小为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;
}
答案 0 :(得分:2)
这是编译器的优化。可能第二个代码只是替换为
for(i=1;i<N;i++)
{
ar[i]=1;
}