当我这样做时,在我的代码中效果很好...

...

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

...

但是喜欢
for (i = 2; i < sqrt(500000) + 1; i++)

编译后执行,出现错误,提示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);
        }
    }

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

最佳答案

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

关于c - 与C中的sqrt()函数混淆,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5297474/

10-13 05:49