当我解决项目欧拉问题时,它要求我总结所有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()
,是吗?
也许你使用过大的数字 – STF