Você está na página 1de 3

Decomposio de um nmero N em

seus fatores primos


Nmeros Primos
Nmeros primos so aqueles que tem somente dois
divisores:
- a unidade (1)
- e ele prprio (N)
isto , nmeros primos no possuem divisores. Sabe-se que
os nmeros inteiros podem ser decompostos em seus fatores
primos. O processo de se descobrir os fatores primos de
um nmero consiste em efetuar sucessivas divises pelos
nmeros primos e descobrir quais deles so os divisores,
isto , a diviso no sobra resto.
O programa est apresentado abaixo e est dividido em 3
funes:
- a funo principal
- a funo Fatorar
- a funo EPrimo
Veja abaixo:

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;
}
}

Decomposio em fatores primos - 3

Você também pode gostar