Ver Mensaje Individual
  #2 (permalink)  
Antiguo 01/10/2007, 01:17
picaporte
 
Fecha de Ingreso: noviembre-2003
Mensajes: 59
Antigüedad: 21 años, 1 mes
Puntos: 0
Re: Ayuda Primos Y Binarios

Te dejo unas imagenes como me quedo.

La funcion buscar primos se puede optimizar, como por ejemplo no buscar en numeros pares o que terminen en 5, etc. para numeros pequeños no importa
pero si es para numeros grandes tendrias que arreglarlo.

Saludos.




Código:
import java.text.DecimalFormat;
import javax.swing.JOptionPane;

/*
 * QuePa.java
 *
 * Created on 30-09-2007, 10:52:12 PM
 *
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 *
 * @author Picaporte
 */
public class QuePa {

    public static void main(String[] args) {

        String nTxt;
        String signoString = "";
        String resultadoPantalla = "";
        int n;


        double resultado = 0;
        long contador;
        long contadorOriginal;
        int multiplicadorSigno = -1;
        double sumaTotal = 0;
        double numerador;
        double denominador;

        contador = 0;
        contadorOriginal = 0;

        nTxt = JOptionPane.showInputDialog("Ingrese el Nº de terminos: ");
        n = Integer.parseInt(nTxt);


        DecimalFormat df = new DecimalFormat();
        df.setMaximumFractionDigits(0);

        for (int a = 1; a <= n; a++) {
            if (esPrimo(a)) {
                if (contador == 0) {
                    contadorOriginal++;
                    contador = contadorOriginal;
                    multiplicadorSigno = multiplicadorSigno * -1;
                }

                numerador = factorial(sumaBinario(a)) * multiplicadorSigno;
                denominador = a;
                resultado = (numerador / denominador);
                sumaTotal = sumaTotal + resultado;
                contador--;
                if (numerador > 0) {
                    signoString = "+";
                } else {
                    signoString = "";
                }
                //desabilitalo si es necesario
                resultadoPantalla = resultadoPantalla + (signoString + df.format(numerador) + "/" + df.format(denominador));
            }
        }

        resultadoPantalla = resultadoPantalla + "=" + sumaTotal;
        JOptionPane.showMessageDialog(null, resultadoPantalla);
    }

    public static boolean esPrimo(long numero) {


        if (numero == 1) {
            return true;
        } else {
            for (long j = 2; j < numero; j++) {

                if ((numero % j) == 0) {
                    return false;
                }
            }
        }

        return true;
    }

    public static long factorial(long numero) {

        if (numero <= 1) {
            return 1;
        } else {
            return numero * factorial(numero - 1);
        }
    }

    public static long sumaBinario(long numero) {


        long digito;
        long iSuma = 0;
        long iExponente;
        long resultado = 0;


        iSuma = 0;
        iExponente = 1;

        while (numero > 0) {


            digito = numero % 2;
            numero = numero / 2;
            iSuma = iSuma + digito * iExponente;
            iExponente = iExponente * 10;
            resultado = digito + resultado;
        }
        return resultado;
    }
}