• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

liczby pierwsze c++

+1 głos
308 wizyt
pytanie zadane 9 kwietnia 2021 w C i C++ przez fsfxvcxv Obywatel (1,160 p.)
#include<iostream>
using namespace std;

bool czy_pierwsza(int n)
{
	if(n<2)
		return false; //gdy liczba jest mniejsza niż 2 to nie jest pierwszą
		
	for(int i=2;i*i<=n;i++)
		if(n%i==0)
			return false; //gdy znajdziemy dzielnik, to dana liczba nie jest pierwsza
	return true;
}

int main()
{
	int n;
	
	cout<<"Podaj liczbę: ";
	cin>>n;
	
	if(czy_pierwsza(n)) //lub czy_pierwsza(n)==1
		cout<<"Liczba "<<n<<" jest pierwsza"<<endl;
	else
		cout<<"Liczba "<<n<<" nie jest pierwsza"<<endl;
	
	return 0;
}

Witam mam pytanie odnosnie kodu z pewnej strony internetowej, a mianowicie nie potrafie zrozumiec tej petli for  for(int i=2;i*i<=n;i++) if(n%i==0) i byłbym wdzieczny gdyby ktos mi to wytlumaczyl 

2 odpowiedzi

+1 głos
odpowiedź 9 kwietnia 2021 przez michal100032 Początkujący (390 p.)

Zacznijmy od 

if(n%i==0)

ten warunek zwraca prawdę tylko wtedy gdy n jest podzielne przez i, (% to operator reszty z dzielenia, kiedy reszta z dzielenia to zero to n jest podziele przez i), a to znaczy że liczba nie jest liczbą pierwszą.

Pętla

for(int i=2;i*i<=n;i++)

to pętla szukająca wszystkich liczb które mogą dzielić n. Pętla kończy swoje działanie gdy i * i > n, czyli inaczej i > sqrt(n) (pierwiastkowanie z obu stron, zakładamy że n > 0). Innymi słowy pętla zaczyna przy i = 2 i kończy gdy i przekorczy pierwiastek z n.

Jeżeli liczba jest liczbą złożoną to na pewno ma dzielnik mniejszy bądź równy swojemy pierwiastkowi. Wynika to z tego że jeżeli istnieje czynnik większy od pierwiastka n to musi istnieć też mniejszy (np. 36 = 3 * 12, 3 < 6 a 12 > 6).

Mam nadzieje że pomogłem, pozdrawiam.

0 głosów
odpowiedź 9 kwietnia 2021 przez tangarr Mędrzec (155,140 p.)
Pętlę zaczynamy od wartości i=2

Warunek i*i<n jest optymalizacją. Jeżeli liczba i po podniesieniu do kwadratu jest większa od n liczby to to kolejne liczby na pewno nie będą dzielnikami liczby n.

Operator % w C/C++ zwraca resztę z dzielenia. Jeżeli liczba n po podzieleniu przez i nie daje reszty (innymi słowy reszta jest równa zero) to liczba jest n jest podzielna przez i.

Podobne pytania

0 głosów
1 odpowiedź 968 wizyt
pytanie zadane 22 maja 2023 w C i C++ przez KarmazynowyKaraś Nowicjusz (240 p.)
0 głosów
1 odpowiedź 856 wizyt
pytanie zadane 14 września 2022 w C i C++ przez fsfxvcxv Obywatel (1,160 p.)
0 głosów
0 odpowiedzi 486 wizyt
pytanie zadane 1 sierpnia 2023 w C i C++ przez Jakub005 Początkujący (310 p.)

93,630 zapytań

142,551 odpowiedzi

323,054 komentarzy

63,134 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 2174p. - dia-Chann
  2. 2153p. - DziarnowskiJ
  3. 2123p. - Łukasz Piwowar
  4. 2077p. - raydeal
  5. 1989p. - CC PL
  6. 1957p. - Maurycy W
  7. 1954p. - Adrian Wieprzkowicz
  8. 1895p. - rucin93
  9. 1855p. - Michal Drewniak
  10. 1777p. - robwarsz
  11. 1701p. - rafalszastok
  12. 1588p. - Tomasz Bielak
  13. 1564p. - Łukasz Eckert
  14. 1491p. - Rafał Trójniak
  15. 1377p. - ssynowiec
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...