Segítene. Valaki. Pascal-ban?
Pl. beolvasok 8-at és azt akarom,hogy kiírja az összes prim számot ami 8 számjegyű
Hogyan csinálom ?
Köszönöm előre is!
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
A legegyszerűbb (és legszámításigényesebb megoldás) két ciklus: lépsz számról számra, és megnézed, van-e osztója (elosztod, ha van maradék, akkor nem osztója) majd így mész számról-számra.
Baromi sok CPU időt igényel, és elég sokáig tart, de ennél egyszerűbb nincs :)
Most te viccelsz ? Kb.ennyit én is elképzeltem
Arra voltam kíváncsi,hogy ez hogyan nézne ki Pascal-ban
legalább egy kis ízelítő lehetne
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
Ha tudsz pascalban programozni, akkor ezt tudni kéne. Ezért írtam a legalapabb verziót.
Két ciklus. Annyiszor 10*10, ahány a beolvasott szám: ez lesz az induló szám, és még egyszer 10, -1 a maximum szám.
Az első ciklus egyesével fog lépkedni ezen számok között.
A második indul 2-től (az 1 biztosan osztó) egészen 10*10 beolvasott számszor -1-ig tart. Minden egyes számmal végzel egy maradékos osztást: ha a maradék nagyobb, mint 0-a, akkor nem osztó. Abban a pillanatban, ha találsz egy maradékot, a szám máris mehet a kukába, és léphet tovább az első ciklus.
És így szépen meglesz a prímszámok.
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
for i=10000000 to 99999999 do
for j=1 to i do
x=i/j stb...
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
var
i,j:longint;
vanoszto:boolean;
begin
for i:=10000000 to 99999999 do {tesztelendo szamok ettol eddig}
begin
vanoszto:=false;{aktualis i-re beallitom hogy nincs oszto}
for j:=2 to i-1 do{letesztelem hogy prim e}
if i mod j = 0 then {ha talaltam osztot akkor }
vanoszto:=true;{ vanoszto erteket igazra allitom}
if not vanoszto then{ ha nem talaltam osztot akkor}
write(i,' '); {kiirom a primtesztelt szamot}
end;
end.
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
Ha csak kicsit nem spórolunk az egyszerűséggel akkor csak a négyzetgyökéig teszteljük a számot (sqrt függvénnyel) és sokkal gyorsabb.
var
i,j:longint;
vanoszto:boolean;
begin
for i:=10000000 to 99999999 do {tesztelendo szamok ettol eddig}
begin
vanoszto:=false;{aktualis i-re beallitom hogy nincs oszto}
for j:=2 to trunc(sqrt(i)) do{letesztelem hogy prim e}
if i mod j = 0 then {ha talaltam osztot akkor }
vanoszto:=true;{ vanoszto erteket igazra allitom}
if not vanoszto then{ ha nem talaltam osztot akkor}
write(i,' '); {kiirom a primtesztelt szamot}
end;
end.
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
Miért nem használ senki elöl/hátultesztelős ciklust?
while ((j<trunc(sqrt(i)) and (i mod j<>0)) do
j:=j+1;
vanoszto:=(j<trunc(sqrt(i))
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
Most nézem hogy rosszul van írva a 23:43 és 23:50 nem stimmel
for i:=1000000 to 999999 do sor helyett
for i:=10000000 to 99999999 do kellene lenni, tegnap ki is próbáltam őket, ma meg kimásoltam az oldalról és kipróbáltam és nem stimmelt ... Az még hagyján hogy a szépen tagolt sorok tagolását elrontja az oldal de hogy még ezen felül a vágólapról beillesztett szöveget is elcseszerinti, ilyet még nem láttam.
Ismét kipróbálom a beillesztést:
var
i,j:longint;
vanoszto:boolean;
begin
for i:=10000000 to 99999999 do {tesztelendo szamok ettol eddig}
begin
vanoszto:=false;{aktualis i-re beallitom hogy nincs oszto}
for j:=2 to trunc(sqrt(i)) do{letesztelem hogy prim e}
if i mod j = 0 then {ha talaltam osztot akkor }
vanoszto:=true;{ vanoszto erteket igazra allitom}
if not vanoszto then{ ha nem talaltam osztot akkor}
write(i,' '); {kiirom a primtesztelt szamot}
end;
end.
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
Ez marha jó Valaki be tudja írni ezt a sort? Csak a feladatnak megfelelő méretű hosszú számokkal?
for i:=10000000 to 99999999 do
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!