Kezdőoldal » Számítástechnika » Programozás » Miért nem jó ez a program...

Miért nem jó ez a program free pascalban? (pi számoló)

Figyelt kérdés

program primszam;

uses crt;

var d,e,h,i:integer;

begin

clrscr;



for i:=1 to 1000 do begin

e:=0;

for d:=1 to 1000 do begin

for h:=1 to 1000 do begin

if i/d=h then begin

e:=e+1;

if e=2 then

writeln(i);

end;

end;

end;

end;

readln;

end.



ne azt írjátok le hogy hogy lehet másképp megoldani hanem hogy lehet a legkevesebb változtatással helyessé tenni ezt a kódot hogy a pí számokat keresse 1-től 1000ig


2010. aug. 14. 23:41
1 2
 11/15 A kérdező kommentje:
bocsi hogy beleszólok de az 1 nem prímszám ! amúgy köszönöm a válaszokat. !majd megcsinálom úgy is :)
2010. aug. 15. 22:12
 12/15 anonim ***** válasza:
Tényleg nem. Százmilliós nagyságrendű.
2010. aug. 16. 08:07
Hasznos számodra ez a válasz?
 13/15 anonim ***** válasza:

Én vagyok akitől kérdezted, hogy hogy csinálnám.

De igazából én vagyok a 3. válaszoló is, úgyhogy már leírtam. :)


1000-ig kevés szám van (már a számítógépnek), így elég az is, de százmilliós vagy tízmilliós számokra inkább Erisztotenész szitája.

Az ötlete a következő: Tudjuk, hogy egy prímszám egész osztói csakis az 1 és önmaga.

Veszel egy vektort (egy dimenziós tömböt, tényleg tanultál már olyat?), amiben azt tárolod, hogy egy szám prím-e vagy sem. Az egyest bejelölöd, hogy nem prím, mivel nem az... :P

Ezután ezt csinálod: keresed a következő prím számot, ami mindig nagyobb mint az előző szám amit néztél (az elején az 1nél nagyobb), és a vektorban az értéke igaz, vagyis prím szám. Ez után veszed a prím szám összes többszörösét, és a vektorban bejelölöd őket, mint nem prímek. (Mivel oszthatók legalább 3 számmal: önmagukkal, 1-el, és az előbb megtalált prím számmal) Ezt addig csinálod, amíg a többszörös nagyobb vagy egyenlő lesz a maximum számmal ameddig mész. Ez után újrakezded, és veszed a következő prím számot. :) Addig csinálod, míg a prím szám négyzete nagyobb vagy egyenlő lesz a maximumnál ameddig keresed a prímeket.

Itt van egy jó link ami ezt magyarázza:

[link]

2010. aug. 16. 10:37
Hasznos számodra ez a válasz?
 14/15 A kérdező kommentje:

még egy kicsit javítottam rajta :



program primszam;

uses crt;

var d,e,h,i,f:integer;

begin

clrscr;

for i:=1 to 1000 do begin

e:=0;

for d:=1 to 1000 do begin

for h:=1 to i do begin

if i/d=h then begin

e:=e+1;

end;

end;

end;

if e=2 then

writeln(i);

end;

readln;

end.



így jóval gyorsabb! köszönöm a válaszokat azon a forráskódon pedig majd gondolkodom.

2010. aug. 17. 00:12
 15/15 anonim ***** válasza:

A te módszered írtó lassú, és nem kell ide semmi erisztotenész csak ész:

var n,i,g,j:integer;


begin

for i:=1 to 1000 do

begin

g:=0;

for j:=1 to i do

if i mod j=0 then

inc(g);

if g=2 then

write(i,' ');

end;

end.

2012. febr. 15. 18:27
Hasznos számodra ez a válasz?
1 2

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!