Jump to content
Sign in to follow this  
thoga31

Módulo/unidade "Primes"

Recommended Posts

thoga31

Um pequeno snippet útil de início de ano. :)

Um pequeno Módulo (ou Unidade) que vai permitir fazer 3 coisas:

  • Verificar se um número é múltiplo de outro;
  • Verificar se um número é primo;
  • Obter uma lista de nºs primos até um certo limite.

Este código mostra a forma como podemos aproveitar uns procedimentos e funções para simplificar ao máximo todos. Neste caso, o GetPrimes torna-se simplíssimo devido ao facto de depender do IsPrime que trata do processo de verificar se um nº é primo, e este torna-se, por si, uma função útil.

Vejam, usem e enjoy it! :)

{$MODE objfpc}
UNIT Primes;

INTERFACE

function IsPrime(const Number : cardinal) : boolean;
function IsMultiple(const num1, num2 : cardinal) : boolean;
procedure GetPrimes(const Limit : cardinal; var SaveList : array of cardinal);


IMPLEMENTATION

function IsPrime(const Number : cardinal) : boolean;
var i, j : longword;
    Prime, Verified : boolean;
begin
    Prime := true;
    Verificado := false;
    i := 2;
    repeat
          if IsMultiple(Number, i) then begin
              Verified := true;
              Prime := false;
          end else begin
              i := i + 1;
              if (i > Number div 2) then Verified := true;
          end;
    until Verified;
    IsPrime := Prime;
end;


function IsMultiple(const num1, num2 : cardinal) : boolean;
begin
    if (num1 mod num2 = 0) then IsMultiple := true
    else IsMultiple := false;
end;


procedure GetPrimes(const Limit : cardinal; var SaveList : array of cardinal);
var i, j : cardinal;
begin
    SaveList[1] := 2;
    j := 2;
    for i := 3 to Limit do begin
        if IsPrime(i) then begin
            SaveList[j] := i;
            j := j + 1;
        end;
        // o FPC pode considerar a seguinte linha de código ilegal:
        inc(i);
    end;
end;

END.

Nota: não está comentado, pois retirei de um programa que não tinha comentado à data. Posso comentá-lo assim que puder. :P


Knowledge is free!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.