【发布时间】:2016-04-30 15:45:45
【问题描述】:
当我为 Project Euler 解决问题时,它要求我总结所有低于 200 万的素数。这是我的代码:
#include<stdio.h>
#include<math.h>
int isPrime(int);
int main() {
long long int sum = 0;
int i; // index
for(i = 2 ; i < 2000000 ; i++) {
if(isPrime(i)) {
sum += i;
}
}
printf("%lli\n", sum);
}
int isPrime(int num) {
int i; // index
int sq = sqrt(num);
for(i = 2 ; i <= sq ; i++) {
if(num % i == 0) {
return 0;
}
}
return 1;
}
此代码导致正确答案 142913828922。
但是当我将isPrime() 中的 for 循环更改为:
for(i = 2; i <= sq+1; i++) // or even sq+2, sq+3, etc.
导致142913828920和142913828917等不正确的结果
为什么会出错?从理论上讲,它不会改变isPrime() 发送到main() 的号码,是吗?
【问题讨论】:
-
可能你使用的数字太大