irem(5,2);
irem(6,2);
A linha que lê se o tipo (j/i, integer) então, no nosso código, poderia ser substituida por if irem(j,i) = 0 então.
Aqui está o código
Esieve := proc(n)
local i,j, # loop indices
isPrime, # array of booleans
prime_list, # list of primes
sqrtn; # integer approx. of sqrt(n)
opções traçadas inicialiar o vetor
isPrime := table();
isPrime[1] := false;
for i from 2 to n do
isPrime[i] := true
od;
obter uma aproximação de inteiro para a raiz quadrada do argumento 'n'(adicionar 1 por segurança).
sqrtn := 1 + isqrt(n);
o crivo verdadeiro
for i from 1 to sqrtn do
pular isso se não for primo
if isPrime[i] then
for j from i+1 to n do
testa se i divide if type(j/i, integer), então
if irem(j,i) = 0 then
isPrime[j] := false
fi;
od;
fi;
od;
converte a lista de booleanos para uma lista de primos
prime_list := NULL;
for i from 1 to n do
if isPrime[i] then
prime_list := prime_list, i;
fi;
od;
RETURN(prime_list);
end:
Agora tente!
Esieve(10);
Esieve(100);
Esieve(1000);