Kezdőoldal » Számítástechnika » Programozás » C-ben prímszám kereső, miért...

Hengerelőhereverem kérdése:

C-ben prímszám kereső, miért nem működik?

Figyelt kérdés

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;

}



#pímszám
2015. márc. 8. 22:46
1 2
 1/12 Koplárovics Béci ***** válasza:

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)

2015. márc. 8. 23:06
Hasznos számodra ez a válasz?
 2/12 SimkoL ***** válasza:
[link] bár C++, de ugye az nem okoz gondot
2015. márc. 9. 08:21
Hasznos számodra ez a válasz?
 3/12 A kérdező kommentje:

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;

}

2015. márc. 9. 13:46
 4/12 A kérdező kommentje:
Bocsánat, már annyit se ír ki..
2015. márc. 9. 13:47
 5/12 anonim ***** válasza:
Én valahogy így csinálnám: pastebin com/rXYYiMRV
2015. márc. 9. 17:18
Hasznos számodra ez a válasz?
 6/12 A kérdező kommentje:

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;

2015. márc. 9. 17:20
 7/12 A kérdező kommentje:
Viszont valaki tudna válaszolni arra a kérdésemre, hogy az meg miként van, hogy az ezreseket látszólag ugyanolyan gyorsan számolja át 1milliós nagyságrendben is? Elvileg mondjuk 1milliónál végig kéne futnia 1millió számnak és megnéznie van e maradék. Az elején gyorsnak kéne lennie, mert kevés számig kell a második ciklust végigfuttatni, de a vége felé pedig lassulnia kéne, mert ugye 1millió számot végig kell néznie elvileg. Miért nem így van?
2015. márc. 9. 17:28
 8/12 anonim ***** válasza:

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.

2015. márc. 9. 17:45
Hasznos számodra ez a válasz?
 9/12 anonim ***** válasza:
Az meg a másik, hogyha nem használod fel a segítségünket, csak bemásolod az újabb kódjaidat, annak semmi értelme sincs, mert csak magaddal beszélgetsz.
2015. márc. 9. 17:46
Hasznos számodra ez a válasz?
 10/12 anonim ***** válasza:
Négyzetesen lesz lassabb, mert két beágyazott ciklus van. A számítógép viszont elég gyors, az időt nem mérheted másodpercekben. De vannak erre is eszközök.
2015. márc. 9. 18:19
Hasznos számodra ez a válasz?
1 2

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

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!