[ Foro de Pascal ]
Buenas noches, de antemano gracias por su colaboracion y el mantenimiento de este tipo de paginas especiales para novatos con ganas de aprender como yo.. me encontraba leyendo sobre pascal y me encontre un ejercicio que no pude terminar de leer porque no entiendo la logica de lo que realmente hace, no solo porque alli lo detalla, sino porque no lo entiendo... agradeceria si me pueden ayudar a comprenderlo... lo dejo a continuacion
Program Criba (output);
{Halla y escribe los primeros numeros primos}
const
N = 255;
type
tConjuntoPositivos = set of 1..N;
var
primos: tConjuntoPositivos;
elem, k: integer;
procedure EscribirConjuntoPositivos(c: tConjuntoPositivos);
{Efecto: se muestran en la pantalla los elementos
del conjunto c}
var
i: integer;
begin
for i:= 1 to N do
if i in c then
WriteLn(i : 3, ? es primo?)
end; {EscribirConjuntoPositivos}
begin {Criba}
primos:= [1..N];
{Se genera el conjunto inicial}
elem:= 2;
while elem < SqRt(N) do begin
{Inv.: Para todo i ? primos tal que 1 ? i < elem,
se tiene que i es primo}
if elem in primos then begin
k:= 2;
repeat
primos:= primos - [elem * k];
{Se eliminan los n ?
umeros no primos del conjunto}
k:= k + 1
until elem * k > N
end; {if}
elem:= elem + 1
end; {while}
WriteLn(?Los primos menores que ?, N,? son?);
EscribirConjuntoPositivos(primos)
end. {Criba}
Saludos
Es un problema "de libro", una forma rápida de encontrar números primos conocida como "Criba de Erastótenes", sobre el que puedes leer incluso en la Wikipedia:
http://es.wikipedia.org/wiki/Criba_de_Erat%C3%B3stenes
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)