bartek118 pisze:Przecież to wszystko co wymaga zmiany
po pierwsze nie ma prawa działać, bo program wyświetla n pierwszych liczb, a nie z zakresu od 2 do n.
po drugie algorytm jest strasznie nieefektywny. Można dodać co najmniej 3 warunki na skrócenie wyszukiwania.
po 3 popraw nazewnictwo zmiennych, bo ciężko się domyślić.
po 4:
Kod: Zaznacz cały
#include <iostream>
using namespace std;
int main()
{
int dolny_zakres, gorny_zakres, liczby, czy_nie_jest_pierwsza;
cout << "Podaj dolny zakres: ";
cin >> dolny_zakres;
cout << "Podaj gorny zakres: ";
cin >> gorny_zakres;
if (gorny_zakres < 2)
{
cout << "Brak l. pierwszych..";
exit(0);
}
cout << "Oto liczby pierwsze z podanego przedzialu: " << endl;
if (dolny_zakres == 1)
dolny_zakres += 2;
if (dolny_zakres % 2 == 0)
dolny_zakres++;
for (int i = dolny_zakres; i <= gorny_zakres; i = i + 2)
{
czy_nie_jest_pierwsza = 0; // 0 == jest pierwsza
for (liczby = 2; liczby <= i / 2; liczby++) // sprawdza czy liczba jest podzielna (od 2 do "podana liczba/2")
{
if ((i % liczby) == 0)
{
czy_nie_jest_pierwsza = 1;
break;
}
}
if (czy_nie_jest_pierwsza == 0)
cout << i << endl;
}
cin.get();
cin.get();
return 0;
}