pascal, kwadrat liczby pierwszej

mateusz.ex
Użytkownik
Użytkownik
Posty: 459
Rejestracja: 16 wrz 2008, o 20:50
Płeć: Kobieta
Lokalizacja: gradowa
Podziękował: 357 razy

pascal, kwadrat liczby pierwszej

Post autor: mateusz.ex »

Mam problem z programem który wczyta dane z pliku(500 licz, max długosc 6 cyfr) i wypisze te które są kwadratami liczb pierwszych.Czy mógłby mi ktos z tym pomóc?

Kod: Zaznacz cały

program liczby_pierwsze;
uses crt;

var i,p,s,b:longint;
a:array[1..500] of real;
liczby:text;
begin
s:=0;
clrscr;
assign(liczby, 'C:\liczby.txt');
reset(liczby);
for i:=1 to 500 do
begin
read(liczby,b);
a[i]:=sqrt(b);
end;
for i:= 1 to 500 do
begin
for p:=2 to a[i]-1 do
begin
if not a[i] mod p=0 then begin
writeln(a[i]);
end;
 end;
readkey;
end;
end.
szatkus
Użytkownik
Użytkownik
Posty: 231
Rejestracja: 13 gru 2009, o 01:27
Płeć: Mężczyzna
Lokalizacja: Zbąszynek
Pomógł: 41 razy

pascal, kwadrat liczby pierwszej

Post autor: szatkus »

Kod: Zaznacz cały

for p:=2 to a[i]-1 do
Po co sprawdzasz podzielność przez wszystkie liczby? To nie ma sensu. Zrób sobie na początku tablicę liczb pierwszych i z niej sprawdzaj podzielność.
mateusz.ex
Użytkownik
Użytkownik
Posty: 459
Rejestracja: 16 wrz 2008, o 20:50
Płeć: Kobieta
Lokalizacja: gradowa
Podziękował: 357 razy

pascal, kwadrat liczby pierwszej

Post autor: mateusz.ex »

ale jak mam ją zrobic?

-- 9 lutego 2010, 21:33 --

wymysliłem cos takiego, ale wypisuje mi tylko 4 liczby pierwsze.(przy tym nie sprawdza kwadratu liczby).

Kod: Zaznacz cały


var
a:array[1..500] of longint;
liczby:text;
p,i,n:integer;
label 1;
label 2;
label 3;
begin
assign(liczby,'c:\liczby.txt');
reset(liczby);
for i:= 1 to 50 do begin
read(liczby,a[i])
end;
for i:=1 to 500 do
begin
p:= 2;
1:
if p=a[i] then goto 2 else
if a[i] mod p =0 then goto 3  else p:= p+1 ;
goto 1;
2:
writeln(a[i]);
3:
end;
readln;
end.
szatkus
Użytkownik
Użytkownik
Posty: 231
Rejestracja: 13 gru 2009, o 01:27
Płeć: Mężczyzna
Lokalizacja: Zbąszynek
Pomógł: 41 razy

pascal, kwadrat liczby pierwszej

Post autor: szatkus »

Sito Erastotenesa najszybciej. A skoro interesują Cię liczby pierwsze do 1000 to możesz nawet na chama sprawdzać czy się dzieli przez cokolwiek, jeśli tak to dodajesz do listy.
Poza tym nie używaj goto. Są przestarzałe.
ODPOWIEDZ