[C++] Liczby pierwsze z podanego przedziału

Transpluton
Użytkownik
Użytkownik
Posty: 125
Rejestracja: 1 gru 2012, o 14:45
Płeć: Mężczyzna
Lokalizacja: Zależna od przestrzeni metrycznej...
Podziękował: 94 razy

[C++] Liczby pierwsze z podanego przedziału

Post autor: Transpluton »

W jaki sposób zmodyfikować ten program wyświetlający n liczb pierwszych tak aby wyświetlał liczby pierwsze z przedziału <a,b>?

Kod: Zaznacz cały

#include <iostream>
using namespace std;
int main()
{
  unsigned int n,lp,p,d;
  bool t;
  cin >> n;
  lp = 0;
  p  = 2;
  while(lp < n)
  {
    t = true;
    for(d = 2; d < p; d++)
      if(p % d == 0)
      {
        t = false;
        break;
      }
    if(t)
    {
      cout << p << " ";
      lp++;
    }
    p++;
  }
  cout << endl;
  return 0;
}
bartek118
Użytkownik
Użytkownik
Posty: 5974
Rejestracja: 28 lut 2010, o 19:45
Płeć: Mężczyzna
Lokalizacja: Toruń
Podziękował: 15 razy
Pomógł: 1251 razy

[C++] Liczby pierwsze z podanego przedziału

Post autor: bartek118 »

Kod: Zaznacz cały

lp = a;
Transpluton
Użytkownik
Użytkownik
Posty: 125
Rejestracja: 1 gru 2012, o 14:45
Płeć: Mężczyzna
Lokalizacja: Zależna od przestrzeni metrycznej...
Podziękował: 94 razy

[C++] Liczby pierwsze z podanego przedziału

Post autor: Transpluton »

Nic mi to nie pomogło...
bartek118
Użytkownik
Użytkownik
Posty: 5974
Rejestracja: 28 lut 2010, o 19:45
Płeć: Mężczyzna
Lokalizacja: Toruń
Podziękował: 15 razy
Pomógł: 1251 razy

[C++] Liczby pierwsze z podanego przedziału

Post autor: bartek118 »

Przecież to wszystko co wymaga zmiany
Transpluton
Użytkownik
Użytkownik
Posty: 125
Rejestracja: 1 gru 2012, o 14:45
Płeć: Mężczyzna
Lokalizacja: Zależna od przestrzeni metrycznej...
Podziękował: 94 razy

[C++] Liczby pierwsze z podanego przedziału

Post autor: Transpluton »

nadal się nie zgadza bo na wyjściu otrzymuję w zakresie od 900 do 1000:

Kod: Zaznacz cały

900
1000
907 911 919 929 937 941 947 953 967 971 977 983 991 997 1009 1013 1019 1021 1031 1033 1039 1049 1051 1061 1063 1069 1087
 1091 1093 1097 1103 1109 1117 1123 1129 1151 1153 1163 1171 1181 1187 1193 1201 1213 1217 1223 1229 1231 1237 1249 1259
 1277 1279 1283 1289 1291 1297 1301 1303 1307 1319 1321 1327 1361 1367 1373 1381 1399 1409 1423 1427 1429 1433 1439 1447
 1451 1453 1459 1471 1481 1483 1487 1489 1493 1499 1511 1523 1531 1543 1549 1553 1559 1567 1571 1579 1583 1597 1601 1607
 1609

Process returned 0 (0x0)   execution time : 2.960 s
Press any key to continue.
kalwi
Użytkownik
Użytkownik
Posty: 1931
Rejestracja: 29 maja 2009, o 11:58
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 145 razy
Pomógł: 320 razy

[C++] Liczby pierwsze z podanego przedziału

Post autor: kalwi »

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;
}
ODPOWIEDZ