Miért nem jó? (C kód prímkeresé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!
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. ;)
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!
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!
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.
Ú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!
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!