Miért nem jó ez a nyomorult "prím-e" függvény? (háromnál nagyobb számokra)
Benne van:
- a bekért szám négzytegyökéig
- csak és kizárólag azokkal a számokkal nézi meg, amik nem párosak (így az i kettővel növekszik)
Próbáltam már vagy 5 féleképpen a while feltételt, próbáltam for ciklussal, nem jó.
static bool prim_e(int s)
{
bool eredmeny=false;
int eddig = (int) (Math.Sqrt(s));
int i=3;
if (s > 3)
{
while (i <= eddig && eredmeny==false)
{
if (s % i == 0) eredmeny = false;
else eredmeny = true;
i += 2;
}
}
return eredmeny;
}
Az else ág miatt, az nem kell bele.
Számolós ciklusokat szerencsésebb for-ral megvalósítani.
Kicsit leegyszerűsítve és javítva. 2-vel is meg kell nézni osztható-e és rossz volt a feltétel.
static bool prim_e(int s)
{
bool prim = (i%2 == 1);
int eddig = (int) (Math.Sqrt(s));
for(int i=3; i <= eddig && prim; i+=2)
{
if (s % i == 0) prim = false;
}
return prim;
}
Köszi a válaszokat. :)
Első hozzászólás alapján kivettem az else-t, a feltétel módosult és kezdőértéke is más lett a bool-nak.
Második hozzászóló: tényleg, kettővel is kell vizsgálni.
Val.szeg eszembe jutott volna később is. :D
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, 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!