• 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
348 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,120 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ź 1,022 wizyt
pytanie zadane 22 maja 2023 w C i C++ przez KarmazynowyKaraś Nowicjusz (240 p.)
0 głosów
1 odpowiedź 974 wizyt
pytanie zadane 14 września 2022 w C i C++ przez fsfxvcxv Obywatel (1,160 p.)
0 głosów
0 odpowiedzi 550 wizyt
pytanie zadane 1 sierpnia 2023 w C i C++ przez Jakub005 Początkujący (310 p.)

93,765 zapytań

142,721 odpowiedzi

323,373 komentarzy

63,359 pasjonatów

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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...