C-ben prímszám kereső, miért nem működik?
Egyszerűen nem jövök rá mit rontottam el, pedig csak nem valami ördögi dolog, itt is lenne:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int x, y, n, c;
n=0;
c=0;
printf("Meddig nezzem a primeket?");
scanf("%d", &c);
for(x=2;x<c;x++)
{
for(y=1;y<x;y++)
{
if(x%y==0){n++;}
}
if(n==2){n=0; printf("%d\n", x);}
}
return 0;
}
Mivel y<x-ig nézed, így ráadásul aminek 2 osztója van, az nem prím (önmagával nem vizsgálod).
Normál esetben a négyzetgyökéig, kicsit rosszabb esetben a feléig szoktuk vizsgálni, ráadásul 2-től az osztókat és logikai típussal figyeljük, hogy prím-e.
for (x=2;x<=c;x++)
{
prim=true;
for (y=2;y>x/2;y++)
{
if (x%y==0) prim=false;
}
if (prim) { printf(%d\n",x);}
}
(Nem teszteltem, elvileg így kéne jónak lennie)
Nem sokat változott tegnap óta, most így néz ki és még mindig nem fut, csak kiírja egyszer, hogy 3 és 4 és leáll.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int x, y, n, c;
n=0;
c=0;
printf("Meddig nezzem a primeket?");
scanf("%d", &c);
for(x=2;x<=c;x++)
{
for(y=1;y>x;y++)
{
if(x%y==0){n++;}
}
if(n==2){printf("%d\n", x);}
}
return 0;
}
Na sikerült kiagyalnom. Azt még mindig nem tudom az előbb feltűntett miért nem működik, minden esetre ez működik:
int main()
{
int x, y, n, c, st;
c=0;
st=0;
printf("Adj emg egy szamot:\n");
scanf("%d", &c);
printf("A primszamok %d-ig:\n", c);
for(x=2;x<=c;x++)
{
n=0;
for(y=2;y<x;y++)
{
if(x%y==0)
{
n++;
if(n==1){break;}
}
}
if(n==0){printf("%d\n", x); st++;}
}
printf("%d primszam van %d-ig", st, c);
return 0;
Inkább nézd meg a linkjeinket, mert a te kódod elég szar. Mi a fenének vizsgálnád meg még a páros számokat is, amikor egyértelmű, hogy nem lesznek prímek?
Azért fut le gyorsan, mert a mai gigahertzes nagyságrendű órajellel rendelkező processzoroknak ez nudli.
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!