C#
- Calculando os fatores primos de um número
Na teoria dos números, os fatores primos de um inteiro positivo são os números primos que dividem esse inteiro exatamente.
A fatoração de um número inteiro positivo é uma lista de fatores primos do número inteiro, juntamente com suas multiplicidades, o processo de determinar esses fatores também podem ser referidos como "fatoração".
Teoria
Fatoração (português brasileiro) ou Fatorização (português europeu) (AO 1945: Factorização) é o termo usado na álgebra para designar a decomposição que se faz de cada um dos elementos que integram um produto, ou seja, o resultado de uma multiplicação.
Assim como parcela é cada uma das partes que integram uma adição, o fator é como se chama cada elemento que integra o produto.
Com a fatoração busca-se a simplificação das fórmulas matemáticas em que ocorre a multiplicação, especialmente das chamadas equações.(Wikipédia)
Assim , fatorar um número, é expressá-lo no formato de uma multiplicação de fatores. Vamos a alguns exemplos:
b) O número 18 pode ser escrito como uma multiplicação de fatores das seguintes formas:
18 = 2 x 9
18 = 3 x 6
18 = 1 x 18
Para descobrir os fatores de um número natural,
vamos considerar o número 40.
40 x 1 = 40
4 x 10 = 40
5 x 8 = 40
20 x 2 = 40
Sendo assim, os números 1, 2 , 4, 5, 8, 10, 20 e 40 são fatores do número natural 40.
Agora vamos descobrir todos os números naturais que se dividem exatamente (sem resto) pelo número 40:
40 : 1 = 40
40 : 40 = 1
40 : 2 = 20
40 : 20 = 2
40 : 4 = 10
40 : 10 = 4
40 : 5 = 8
40 : 8 = 5
Então, os divisores de 40 são: 1, 2, 4, 5, 8, 10, 20, 40.
Observe que os fatores e os divisores do número natural 40 são os mesmos. As ideias de fatores e divisores de um mesmo número natural, estão ligadas.
Isso quer dizer que podemos encontrar os divisores de um número natural, descobrindo os seus fatores.
Assim os fatores primos para o número 9360 são: 13 * 5 * 3 * 3 * 2 * 2 * 2 * 2
Observe que os números 13, 5, 3, 2 são números primos.
Para um fator primo p de n, a multiplicidade de p é o maior expoente x para o qual p^x (p elevado a x) divide n exatamente.
Para um inteiro positivo n, o número de fatores primos de n e a soma dos fatores primos de n (não contando multiplicidade) são exemplos de funções aritméticas de n que são aditivas, mas não completamente aditivas.
Vamos então criar um projeto usando a linguagem C# para calcular os fatores primos de um número.
Criando o projeto
Os recursos usados para criar o projeto são:
Abra o VS 2012 Express for desktop e clique em New Project;
Selecione a Visual C# -> Windows e o template Windows Forms Application informando o nome FatoresPrimos e clicando em OK;
![]() |
No formulário padrão form1.cs inclua os seguintes controles a partir da ToolBox:
Define o seguinte leiaute para este formulário:
![]() |
No menu PROJECT clique em Add Class e informe o nome Calculo.cs para este arquivo:
A seguir vamos definir dois métodos estáticos na classe Calculo:
namespace FatoresPrimos
{
public static class Calculo
{
const int MAX_SIZE = 15000;
static bool IsNumeroPrimo(int numero)
{
bool bPrimo = true;
int fator = numero / 2;
int i = 0;
for (i = 2; i <= fator; i++)
{
if ((numero % i) == 0)
bPrimo = false;
}
return bPrimo;
}
static public int GetFatoresPrimos(int numero, out int[] arrResultado)
{
int contador = 0;
int[] vetor = new int[MAX_SIZE];
arrResultado = new int[MAX_SIZE];
int i = 0;
int indice = 0;
for (i = 2; i <= numero; i++)
{
if (IsNumeroPrimo(i) == true)
vetor[contador++] = i;
}
while (true)
{
if (IsNumeroPrimo(numero) == true)
{
arrResultado[indice++] = numero;
break;
}
for (i = contador - 1; i >= 0; i--)
{
if ((numero % vetor[i]) == 0)
{
arrResultado[indice++] = vetor[i];
numero = numero / vetor[i];
break;
}
}
}
return indice;
}
}
}
|
Tudo pronto ! Vamos definir o código no evento Click do botão de comando Calcular conforme abaixo:
private void btnCalcular_Click(object sender, EventArgs e)
{
lbFatores.Items.Clear();
int numero = Convert.ToInt32(txtValor.Text);
int contador = Calculo.GetFatoresPrimos(numero, out arrResultado);
for (int i = 0; i < contador; i++)
{
lbFatores.Items.Add(arrResultado[i]);
if (i != contador - 1)
lbFatores.Items.Add("*");
lbFatores.Items.Add(string.Format("{0} {1}", arrResultado[i], "*"));
}
}
|
Vemos abaixo o resultado da execução do projeto:
![]() |
Pegue o projeto completo aqui:
FatoresPrimos.zip
Joã 8:45
Mas porque eu digo a verdade, não me credes.Joã 8:46
Quem dentre vós me convence de pecado? Se digo a verdade, por que não me credes?Joã 8:47
Quem é de Deus ouve as palavras de Deus; por isso vós não as ouvis, porque não sois de Deus.Referências: