Witam, mam kod, który daje poprawny wynik czyli wypluwa liczby pierwsze z przedziału (m,n). Chciałem jednak odrobinę zoptymalizować jego działanie i postanowiłem nie analizować liczb parzystych.
Użyłem dodatkowego warunku ustawiającego pierwszy wyraz na liczbę nieparzystą i w pętli analizowałem jedynie co drugą liczbą. Program przestał wypisywać wyniki. Nie potrafię dojść o co chodzi. Linie które popsuły program zaznaczyłem komentarzami w kodzie poniżej.
using namespace std;
///// funkcja pomocnicza sprawdzająca czy liczba jest pierwsza.
bool is_prime(int a)
{
if(a%2==0 || a!=2)
{
return false;
}
else if (a==2)
{
return true;
}
else
{
float b= sqrt(a);
float c;
for(int i=3; i {
c=(float)a/i;
if(c==(int)c)
{
return false;
}
}
return true;
}
}
/////////////////////////////////////////////////////
int main(void)
{
int t;
std::cin >> t;
if (t>10)
{
return 0;
}
for (int k=1; k<=t; k++)
{
int m,n;
std::cin >> m >> n;
if((m%2)==0) // Jeżeli m jest parzyste to dodaj 1, by było nieparzyste.
{ //
m=m+1; // Bez tych linii kod działa poprawnie
} //
for(int j=m; j<=n+1; j+=2) // Bez warunku powyżej przyrost j powinien wynosić 1
{
bool status=is_prime(j);
if(status)
{
std::cout << j << "\n";
}
}
std::cout << "\n";
}
return 0;
}
Sama zmiana wartości m się udaje. Ktoś rozumie co się dzieje pomiędzy zmianą wartości m, a użyciem go w pętli for?