Kezdőoldal » Számítástechnika » Programozás » Miért nem jó? (C kód prímkeres...

Miért nem jó? (C kód prímkeresés. )

Figyelt kérdés

A prímeket ki szeretném írni 1-től n-ig.

(tudom, az 1 az nem prím)

úgy gondoltam, hogy az egyestől elkezdem léptetni a számokat, és minden egyes számot elosztok az előtte lévő összes többi számmal, ha azok maradék nélkül vannak benne akkor egy változót léptetek. Ugye ha prímről van szó akkor az a változó +2 értéket fog viselni.

Ezekután egy feltételvizsgával megnézem, hogy nőtt e a változó ha igen akkor kiíratom az adott számot.

Ez lenne a kód:

#include<stdio.h>

#include<stdlib.h>

int main()

{

int ig,a;

int for1,for2;

a=-2;

scanf("%d",&ig); /*bekér egy számot, ameddig kiszámolja a prímeket.*/

for(for1=1;for1<=ig;for1++) /* ez a for arra kell hogy 1től n-ig levizsgálja a számokat.*/

{

for(for2=1;for2<=for1;for2++) /* ez az első for értéke előtti számokkal varázsol*/

{

if(for1%for2==0) /* for2 csak a for1-vel egyenlő vagy kisebb lehet így megnézhetem, hogy egy szám az előtte lévő számokkal osztható e maradék nélkül.*/

{

a++; /* ha minden igaz akkor ez 2X fog növekedni ha prímről van szó*/

}

}

if(a==0 && a==-1) /* ez megnézi, hogy a egyenlő-e 0val, mert ha igen akkor prím számról van szó*/

{

printf("%d\n",for1); /* kiírja a számot*/

}

}

system("PAUSE");

}


Ha lefuttatom akkor nem ír ki semmit.

Rossz logikát használtam? Vagy netán jó logikát, de rosszul valósítottam meg??

Köszi!



2012. febr. 5. 21:11
 1/6 anonim válasza:

Több dolgot nem értek, de kezdjük azzal, hogy a++ azt jelenti hogy a-t 1-el növeli, te szerintem azt hitted hogy 2-vel.

if(a==0 && a==-1) nos ez pedig amúgy is mindig hamis lesz mivel a && operátor ÉS-t jelent.

További megjegyzések a reakció után. ;)

2012. febr. 5. 21:28
Hasznos számodra ez a válasz?
 2/6 anonim ***** válasza:
és az a-t a második for ciklus előtt állítsd be (-2)-re
2012. febr. 5. 21:32
Hasznos számodra ez a válasz?
 3/6 A kérdező kommentje:

nem, tudtam, hogy az a++ csak egyszer léptet egyet, de ha a n számig az összes számmal elosztja az az n-vel és 1gyel is akkor kétszer lesz igaz!

ohh lehet, hogy az lesz a baj, hogy rossz helyen állítom be az értéké.

Köszi!

2012. febr. 5. 21:37
 4/6 A kérdező kommentje:

első!

köszi szépen, hogy leírtad, hogy && az az ÉS művelet.

A VAGY műveletre gondoltam, de valamiért ez jött...

Így már meg is van, persze az 'a' értékének megadása is átkerült!

Köszi még egyszer!

2012. febr. 5. 21:39
 5/6 anonim válasza:

Na még:

-írtad hogy az 1 nem prím. akkor ne vizsgáld. illetve for2 se 1-től menjen, hanem 2-től

-elvileg elég a vizsgált szám gyökéig nézni az osztókat, de mivel nem értem hogy miért, azt mondom hogy elég a feléig. nyílván a felénél nagyobb szám biztosan nem lesz meg benne.

-amikor maradékképzéssel vizsgálsz az mi akar lenni? for2 megy egyesével (immár 2-től) és ha nincs maradék akkor prím? ez éppen azt jelenti hogy osztható az adott számmal, tehát nem prím.

2012. febr. 5. 21:41
Hasznos számodra ez a válasz?
 6/6 A kérdező kommentje:

Úgy gondoltam, hogy ha prím számot vizsgál akkor kétszer fog léptetni (1 nél és magánál a számnál) ha annál nagyobb számban lépte akkor biztos, hogy nem prím.

Ez egy feladat volt, amit neten találtam és az kérte az egyes kiírását.

Azt értem, hogy Miért csak a feléig kell számolni, de a gyököset nem. Ez valami matematika dolog? Ha igen akkor utána nézek.

És neked is Köszönöm!

2012. febr. 6. 19:56

További 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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!