當我解決項目歐拉問題時,它要求我總結所有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