Documente Academic
Documente Profesional
Documente Cultură
Funo Principal
A funo Principal, definida abaixo, no faz nada. Apenas recebe o nmero num
que se deseja decompor em fatores primos e ento ela chama a funo Fatorar
passando-o como argumento.
funcao principal()
{
num : inteiro;
leia ("digite o nmero: ", num);
Fatorar(num);
}
Funo Fatorar
A funo Fatorar escreve na tela a decomposio do parmetro N em seus fatores
primos. O trabalho global da funo dividir sucessivamente N pelos nmeros
Decomposio em fatores primos - 1
primos div para descobrir os seus divisores. A funo gera os possveis divisores na
varivel div. Para cada nmero div gerado a funo testa se o mesmo um nmero
primo, esse teste feito na seguinte instruo se(EPrimo(div)). Caso esse nmero
div seja um nmero primo a funo testa-o para verificar se um divisor de N, esse
teste realizado atravs da instruo se (N%div==0). Se div for um divisor de N,
ento o seu valor escrito na tela. Uma vez que um divisor foi encontrado, a
varivel N atualizada para o novo quociente, isto , N := N/div e o processo tem
sequncia. Esse procedimento repetido enquanto o valor de N for maior que 1, isto
, enquanto(N>1) que o lao que controla a execuo da funo.
funcao Fatorar(inteiro N)
{
// decompoe o numero N em seus fatores primos
div : inteiro;
// divisores de N
div := 2;
enquanto (N>1)
{
se (EPrimo(div))
{
se ((N % div)==0)
{
escreva(N, " | ", div);
N := N / div;
}
senao
{
div := div + 1;
}
}
senao
{
div := div + 1;
}
}
}
Funo EPrimo
O trabalho global da funo Eprimo contar o nmero de divisores de N. Caso o
nmero de divisores de N seja 0 (zero) o nmero N em questo um nmero primo.
Observe que a funo no testa com o valor 1 e nem com o prprio valor N. A
funo Eprimo verifica de o nmero div gerado na funo Fatorar primo ou no.
Decomposio em fatores primos - 2
O nmero div passado como argumento para a funo EPrimo. A funo Eprimo
recebe div no parmetro N. O valor div incrementado de um em um e a cada
iterao testado como possvel divisor de N. Caso ele seja um divisor a varivel
divisores incrementada. Nesse ponto, o lao enquanto (i<N) j poderia ser
interrompido pois j se descobriu que N no primo. Como voc faria isso na
funo abaixo ??? Por outro lado, se nenhum divisor foi encontrado, isto ,
divisores=0, o nmero N primo e a funo retorna o valor 1.
funcao EPrimo(inteiro N)
{
// verifica se o numero e ou nao primo
// retorna 1 (um) se o numero for primo
// retorna 0 (zero) se o numero nao for primo
i : inteiro;
// numeros inteiros a partir de 1
divisores : inteiro;
// quantidade de divisores de N
i := 2;
// ignorando divisao por 1
divisores := 0;
enquanto (i < N)
{
se (N % i == 0)
{
divisores := divisores + 1;
}
i := i + 1;
}
se (divisores==0)
{
retorne 1;
}
senao
{
retorne 0;
}
}