Je li broj prost

Je li broj prost

offline
  • Pridružio: 11 Okt 2014
  • Poruke: 342

Znam da je trivijalno, ali nije mi jasno zašto ovaj algoritam ne radi kako bi trebao raditi.
bool JeLiProst(int n) {   if (n <= 1)return false;   for (int i = 2; i <= sqrt(n); i++)     if (n % i == 0)return false;   return true; }

Prethodni kod radi korektno. Ali zašto ovaj uvjet if(n<=1)return false; nije mogao da se ubaci unutar petlje? To bi ovako izgledalo:

bool JeLiProst(int n) {   for (int i = 2; i <= sqrt(n); i++)     if (n <= 1 || n % i == 0)return false;   return true; }

Sada kod daje pogrešan rezultat, npr. vraća da je nula prost broj...



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Pridružio: 06 Feb 2012
  • Poruke: 1858

Dobijaš da je nula prost broj, jer ti nije ispunjen uslov ulaska u petlju, a naredna linija koda u toj metodi je return true.



offline
  • Pridružio: 11 Okt 2014
  • Poruke: 342

Hvala puno, obično je banalne stvari teško uočiti

offline
  • Milan
  • Pridružio: 17 Dec 2007
  • Poruke: 14713
  • Gde živiš: Niš

Ali ovde je n konstantna vrednost, i apsolutno nema smisla i neoptimalno je porediti njegovu vrednost u svakoj iteraciji petlje.

A druga strana je što ako je n negativno, matematički korenovanjem dobijaš kompleksan broj, odnosno tvoj program verovatno puca.

offline
  • Pridružio: 06 Feb 2012
  • Poruke: 1858

Pored ove dvije stvari koje je spomenuo Vasa,
prvo rjesenje je bolje, jer je primijenjen guard clauses.
Bolje je odmah od početka da se navikneš pisati kod na taj način, jer ćeš prije ili kasnije doći do toga.
Dakle, u svakoj metodi, pišeš kod za pozitivan ishod, onog za šta je predviđena ta metoda. A granične slučajeve obradiš odmah na početku, pomoću if uslova (bez else).
Iako u drugom slučaju imaš manje linija koda, to nije uvijek bolja opcija.

offline
  • Pridružio: 11 Okt 2014
  • Poruke: 342

hvala puno vasa.93 i Sale.S

Ko je trenutno na forumu
 

Ukupno su 944 korisnika na forumu :: 64 registrovanih, 7 sakrivenih i 873 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: -[CoA]-, 357magnum, A.R.Chafee.Jr., Alibaba1981, Andrija357, Apok, aramis s, awathorn, b_z_b, babaroga, Ben Roj, Bob1312, Bobrock1, BORUTUS, brundo65, bufanje, ccoogg123, Denaya, dragan_mig31, dragoljub11987, Drug pukovnik, FOX, g0xy, gomago, goran.vvv, Joja, kairos, kerinjo, Konda, Koridor, ljuba, Lord Nem, Lucije Kvint, Markan90, menges, mercedesamg, Mercury, milan op1978, moldway, nextyamb, opt1, ostoja, panda1, Parker, Rakenica, RecA, repac, robert1979, royst33, S2M, sakota79, saputnik plavetnila, shone34, sickmouse, Steeeefan, Tas011, Toni, Vatrogasaccc, vesthepes, VJ, vlahale, vsn111, vukovi, wizzardone