Mój kod znajduje się poniżej. działa idealnie, a interwał nie jest zbyt duży. Jednak za każdym razem, gdy przekraczam milion, program się zatrzymuje. na przykład dla przedziału od 2 do 2000000 suma liczb pierwszych powinna wynosić 142913828922 (z tyłu książki), podczas gdy moja aplikacja pokazuje 1179908154. Czy ktoś może wskazać, gdzie się pomyliłem.Znajdowanie sum liczb pierwszych między interwałami (program C++ nie działa dla dużych liczb)
#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' i' long' może przechowywać tylko tak duże liczby. –
Maksymalna wartość jaką może pomieścić 'long' to 2147483647. Oczywiście pożądany wynik jest większy. Będziesz musiał użyć odpowiedniego typu danych. –
Prawdopodobna przepełnienie –