与C中的sqrt()函数混淆

Jas*_*son 2 c linux

当我这样做时,它在我的代码中运行良好...

...

for (i = 2; i <= sqrt(500000); i++)

...
Run Code Online (Sandbox Code Playgroud)

但是喜欢

for (i = 2; i < sqrt(500000) + 1; i++)
Run Code Online (Sandbox Code Playgroud)

编译后执行,发生错误说Segmentation fault (core dumped).

for loop body 是:

for (i = 2; i <= sqrt(500000); i++) {
        summation[i * i] += i;
        for (j = i + 1; j <= 500000 / i; j++) {
            summation[i * j] += (i + j);
        }
    }
Run Code Online (Sandbox Code Playgroud)

这两个for循环之间有什么区别吗?谢谢

APr*_*mer 8

你的第二个循环再次运行:500000不是一个完美的正方形,所以i < sqrt(500000)并且i <= sqrt(500000)始终相等,+1确保另一次迭代.