Kodum aşağıdadır. çok büyük olmayan aralıkta mükemmel çalışır. Ancak, bir milyonu aştığımda program durur. Örneğin, 2 ile 2000000 arasındaki aralıkların toplamı 142913828922 (kitabın arkasından) olmalıdır, oysa başvurum 1179908154'ü gösterir. Birisi nerede yanlış gittiğimi işaret edebilir.Aralıklar arasındaki Asal Sayıların Toplamını Bulma (C++ programı büyük sayılar için çalışmaz)
#include <iostream>
#include <math.h>
#define BELOW 2000000;
using namespace std;
bool isPrime(int num)
{
int i;
for (i = 2; i <= sqrt(num); i++) {
if (num % i == 0) {
return 0;
}
else {
;
}
}
}
int main()
{
long sum = 0;
for (int i = 2; i < BELOW i++) {
if (isPrime(i)) {
sum = sum + i;
printf("sum: %ld\n", sum);
}
}
cin.get();
return 0;
}
'int' ve' long' ile 'uzun' tüm tekrarlarını değiştirmek gerekir. –
Bir 'long'un tutabileceği maksimum değer 2147483647'dir. Açıkçası, istediğiniz sonuç bundan daha büyüktür. Uygun veri türünü kullanmanız gerekecek. –
Olası taşma –