estou com um programa para fatorar… ja fiz algo mando um jar…
aqui consegui uns avanços para automatizar a tarefa… no resultado mostra a quantidade de numeros usados e o divisor que foi usado, que é o que precisarei para calcular o numero de divisores, quais os divisores e depois o mdc.
mas ainda tem um bugzinho… ele dividiu por 11, mas nao contou… estou postando para mostrar o andamento, pretendo resolver isto, mas se interessar alguém e houver dicas, ta válido…
[code]
package numerosprimos;
public class CalculoPrimos_1_1 {
public static void main(String a[]){
int j1=660; //valor de teste…
boolean continua=true; //variavel do while…
int n=1, n2, contPrimo;
float r=0;
int x=0; //marca o valor da array contador…
int contador[]= new int[1000];
int divisor[]= new int[1000];
//+"e o divisor é "+n
System.out.println(“j1=valor:”+j1+“valor de n=: 2”);
while(continua==true){
if(j1%2==0){
j1=j1/2;
System.out.println(“j1=valor:”+j1+“valor de n=2”);
contador[x]=contador[x]+1;
divisor[x]=2; }
else {continua=false;}
if (j1==1){continua=false; //contador[x]–;
}
}
System.out.println(“contador=”+contador[x]);
while(n < 1000){
n2=n-1;
for(contPrimo = n2; contPrimo >= 2; contPrimo=contPrimo-1){
r = n % contPrimo;
if(r == 0){
System.out.println(“O numero “+n+” não é primo!”);
contPrimo=1;
}
}
if(r!=0){
System.out.println(“O numero “+n+” é primo!”);
//se é primo, posso usar meu metodo…
continua=true;
x=x+1;
System.out.println(“j1=valor:”+j1+"valor de n=: "+n);
while(continua==true)
{
System.out.println(“j1=valor:”+j1+"valor de n=: “+n);
System.out.println(“contador[”+x+”] tem valor: "+contador[x]+"e o divisor é "+n);
if (j1%n==0) { j1=j1/n;
contador[x]=contador[x]+1; divisor[x]=n;
}
else {continua=false; }
if (j1==1){continua=false; //se j1=1 está resolvido para de buscar numeros primos…
n=1001; }//if de 1
}
}
n++;
}// terminou o while.
for (int g=0;g<x;g++){
System.out.println(“contador[”+g+"] tem valor: “+contador[g]+” divisor["+g+"] tem valor: "+divisor[g]);
}
}//main
}[/code]
segue aí:
para ajudar… o resultado
run:
j1=valor:660valor de n=: 2
j1=valor:330valor de n=2
j1=valor:165valor de n=2
contador=2
O numero 3 é primo!
j1=valor:165valor de n=: 3
j1=valor:55valor de n=: 3
contador[1] tem valor: 1e o divisor é 3
O numero 4 não é primo!
O numero 5 é primo!
j1=valor:55valor de n=: 5
j1=valor:11valor de n=: 5
contador[2] tem valor: 1e o divisor é 5
O numero 6 não é primo!
O numero 7 é primo!
j1=valor:11valor de n=: 7
O numero 8 não é primo!
O numero 9 não é primo!
O numero 10 não é primo!
O numero 11 é primo!
j1=valor:11valor de n=: 11
j1=valor:1valor de n=: 11
contador[4] tem valor: 1e o divisor é 11
contador[0] tem valor: 2 divisor[0] tem valor: 2
contador[1] tem valor: 1 divisor[1] tem valor: 3
contador[2] tem valor: 1 divisor[2] tem valor: 5
contador[3] tem valor: 0 divisor[3] tem valor: 0
o ultimo contador devia ter valor 1 e o divisor 11, pois dividiu o 11 por 11, uma vez… mas nao esta contando …
estou olhando com calma, mas ja posto. for help.
a fatoração éde 660 é : 2 2 3 5 11 (multiplicados) …
problema no último contador somente…