Kezdőoldal » Számítástechnika » Programozás » Prím számok kiírását hogy...

Prím számok kiírását hogy lehet megoldani c# vagy c++ban?

Figyelt kérdés
pl.: vizsgálja meg 500ig h melyik prímszám és számolja meg hány db van.

2013. dec. 7. 16:01
 1/7 anonim ***** válasza:

A páros számokat eleve kizárhatod. A páratlanoknál elkezdesz osztani a nála alacsonyabb számokkal 2-től kezdődően. Ha egész számra jön ki az osztás, akkor az nem prím.


Lehet optimalizálni, például a páros számokkal nem kell elvégezned az osztást (hiszen ha valaminek páros szám az osztója, akkor maga is páros, azt meg már kizártad az elején).


Nem kell a eredeti/2 fölött elvégezni az osztást, hiszen afölött mindig tört szám lesz.


Igazából ha jól emlékszem, akkor elég az eredeti szám gyökéig elvégezni az osztást, de ezt most nem vágom fejből.

2013. dec. 7. 16:06
Hasznos számodra ez a válasz?
 2/7 anonim ***** válasza:

1.) Végig mész egy ciklussal 2-től 500-ig. (Mivel a 2 az első prím)

2.) Azon belül meg elkezdesz egy ciklust a számnál eggyel kisebbtől ( mivel magával nyilván osztható 499) 2-ig, és ha az adott szám (az első ciklus indexe) osztható ezen ciklus indexével (i%j==0 például), akkor kiugrasz (break) , mert az nem prím, hiszen van más osztója magán és az 1-en kívül. ;

3.) Ha nem ugrottál ki, vagyis (vagyis j==1), akkor kiírod a számot, és növelsz egy változót, ami a prímek darabszámát fogja jelenteni.

4.) A külső cikluson kívül kiírod a darabszámot tartalmazó változót.

2013. dec. 7. 16:11
Hasznos számodra ez a válasz?
 3/7 anonim ***** válasza:

Hát a (2)-ben sokkal célszerűbb az eredeti számot kettővel és a páratlan számokkal megpróbálni osztani maximum az eredeit szám/2-ig (de valójában elég a gyök+1-ig is)


Az 1-es szám nem prím, a 2-es szám pedig az egyetlen páros prím.

2013. dec. 7. 16:24
Hasznos számodra ez a válasz?
 4/7 SimkoL ***** válasza:

Ezerszer kitárgyaltuk már itt mindenféle nyelven:


#include <iostream>

#include <cmath>


using namespace std;


bool primteszt(int szam)

{

bool jo = true ;

if (szam == 2) return true;

if ((szam % 2 == 0) || (szam == 1)) return false;

for (int t = 3; t <= sqrt(szam) + 1; t += 2)

{

if (szam % t == 0)

{

jo = false ;

}

}

return jo ;

}

int main()

{

int db = 0 ;

for (int t = 1; t <= 500; t++)

{

if (primteszt(t))

{

cout << t << " ";

++db;

}

}

cout << endl << db << " primszam van 500-ig";

getchar();

}

2013. dec. 7. 17:10
Hasznos számodra ez a válasz?
 5/7 anonim ***** válasza:

Improve:

-for (int t = 3; t <= sqrt(szam) + 1; t += 2)

+int t=3;

+while ( jo && t <= sqrt(szam) + 1 )

{

if (szam % t == 0)

{

jo = false ;

}

+t += 2;

}


Ne pazaroljuk az áramot! 😉

2013. dec. 7. 17:30
Hasznos számodra ez a válasz?
 6/7 iostream ***** válasza:
Az sqrt a ciklusfeltételben nem is zavar? :D
2013. dec. 7. 21:20
Hasznos számodra ez a válasz?
 7/7 anonim ***** válasza:
iostream: télleg, bocs! mea culpa.
2013. dec. 7. 21:33
Hasznos számodra ez a válasz?

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

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!