与 C 中的 sqrt() 函数混淆

标签 c linux

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

...

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

...

但是喜欢

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

编译后执行,出现错误提示Segmentation fault (core dumped)

for 循环体是:

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 中的 sqrt() 函数混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5297474/

相关文章:

c - 为什么 int *b[5] 形成 8 位的差异而不是 4 位?

c - 将结构发送到先前用指针定义的函数

linux - 'others' 的文件读取权限不起作用

linux - 如何破坏 tar.gz 的 header 以进行测试

linux - ssh 管道命令错误

c - 在 C 中处理内存分配的最佳方法?

c - _dl_sysinfo_int80 的用途是什么?

计算目录中文件的函数

java - 为什么 linux 上的 aFile.toURI().toString() 有一个斜杠?

linux - centos6.5中的HostKey算法