C programozás: n db beolvasott szám közül hány prím? Az a baj, hogy a for ciklusomban mindig csak a kezdő értékre nézi:
for (oszto=2; oszto<= (a[i]/2) ; oszto++) { if ( (a[i]%oszto) ==0) {prim=0};} else{prim=1;} } , azaz oszto=2-re. és ha a szám nem osztható 2-vel, prímnek veszi. A prim=0 azt jelenti, hogy van egy változóm, ami ha a szám nem prím, akkor 0, ha prím, akkor 1, és ezt akarnám megszámolni egy másik változóval...mit kéne csinálnom, hogy végignézze az osztókat?
köszi előre is :)
(gondolom egyébként hogy a for ciklus magja a hibás, át kéne írni úgy, hogy előbb nézze végig a számokat a beolvasott szám feléig, és utána nézze meg, hogy p-nek 1-nek vagy 0-nak kéne lennie, de nem tudom :( )
Szia.
Először is leszögezem, hogy nem vagyok C-s.
Másodszor mint ahogy Te is irtad nem j= a ciklusmag.
Mivel a cikluson belül egyszer 0 lesz a prim értéke egyszer meg 1 attól függően, hogy mi lesz a maradékos osztás eredménye.
Én a cikluson kivülre raknám a primet adnék neki kezdőértéket és belül csak azt vizsgálnám, hogy osztható-e az adot szám. Minta :
prim=1
for (oszto=2; oszto<= (a[i]/2) ; oszto++) {
if ( (a[i]%oszto) ==0) {prim=0};
}
if (prim=1) {
darab=darab+1
}
Ha optimalizálni akarod akkor a ciklust while-vel kellene megcsinálni, mivel nincs értelme végigmenni akár már 5-ig se, ha a szám kettővel osztható akkor már biztosan nem prim.
valahogy igy :
prim=1
oszto=1
while (oszto<=(a[i]/2 and prim=1) {
oszto++
if ( (a[i]%oszto) ==0) {prim=0};
}
Sok sikert.
Üdv.
Szerintem cikluson kivűl le
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!