Prím számok kiírását hogy lehet megoldani c# vagy c++ban?
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.
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.
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.
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();
}
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! 😉
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!