Programa para descomponer un número N en sus factores primos utilizando una estrategia voraz

13 septiembre, 2008 at 02:32

Sabemos que todos los  números enteros es posible expresarlos como el producto de potencias de números primos. A esto  es a lo que se le llama descomposición de un número en sus factores primos.

El siguiente código lo encontré entre mis bodegas de cosas , hace tiempo que no lo veía, es bastante interesante y simple de programar. No recuerdo bien cual fué la razón por la que lo programe, pero parece que  alguien me lo pidió como favor creo.. en fin, la idea es simple dada una entrada de un entero representar su descomposición en números primos.

Este método es realmente eficaz para descomponer cualquier número en sus factores primos. Puedes averiguar como funciona siguiendo tú mismo el código que está a continuación…

Asi que si justo tienes un tiempo de descanso entre tus innumerables preguntas matemáticas , preguntándote si algún día vas a fabricar algún programa que te permita encontrar los factores primos de un número, entonces estás de suerte.

Espero que este código les pueda ayudar en algo, si tienen dudas, solo dejen un comentarios.

input

Código DescompNumPrimos.java

package descomponernumeroenfactprimosenformavoraz;

import java.io.*;
import java.lang.Math;
import javax.swing.*;

public class DescompNumPrimos {

/**
* Él siguiente método es el constructor de la clase , lo que realmente hace
*es
*/

public DescompNumPrimos() {
JOptionPane.showMessageDialog(null,»Bienvenido al Programa\n»+
«=======================\n\n»+
«Desarrollado por : Gustavo Lacoste- 2007 – Universidad de La Frontera\n\n» +
«El siguiente programa utiliza la estrategia voraz para descomponer\n» +
«un número N en sus factores primos.\n\n» +
«ADVERTENCIA\n» +
«===========\n» +
«1.- Recuerda que la descomposición NO se puede realizar con números negativos\n» +
«2.- La complejidad del algoritmo es O(n*log2 n)\n» +
«\n — Para continuar presiona aceptar —«);
int numero=this.leerNumero();
descomponerEnFactorPrimo(numero); //Llama al método con el número deseado.

}

/**
* Método para leer un entero por teclado.
* @return Retorna un entero que ha pulsado el usuario.
*/
private int leerNumero() {
try {
return Integer.parseInt(JOptionPane.showInputDialog(null,»Introduzca un número(entero)»));
}
catch (Exception e) {
JOptionPane.showMessageDialog(null,»Error el formato del número introducido es incorrecto, ingresa un entero !!!.»);
return leerNumero(); //esto es recursividad
}
}

/**
* El siguiente método es el que hace casi todo el trabajo, toma un número y realiza la descomposición
*en factores primos de dicho número.
*
*/
public void descomponerEnFactorPrimo(int numeroADescomponer) {

int factorPrimo = 2;
int contadorDeNumeroDeVecesQueApareceCadaFactor;
String flujoDeSalida=»»;

System.out.print(numeroADescomponer + » = «);

while (numeroADescomponer > 1){
contadorDeNumeroDeVecesQueApareceCadaFactor = 0;

while ( (numeroADescomponer % factorPrimo) == 0) {
//encotrado factor
++contadorDeNumeroDeVecesQueApareceCadaFactor;
numeroADescomponer /= factorPrimo;
}
if (contadorDeNumeroDeVecesQueApareceCadaFactor > 0) {
flujoDeSalida=flujoDeSalida+» «+ («(» + factorPrimo + «^» + (contadorDeNumeroDeVecesQueApareceCadaFactor) + «) «);

}
++factorPrimo;
}
JOptionPane.showMessageDialog(null,»Descomposición Finalizada.\n»+
«==========================\n» +
«El resultado de descomponer en numeros primos el numero «+numeroADescomponer+» es :\n» +
flujoDeSalida+»\n» +
«Desarrollado por : Gustavo Lacoste- 2007 – Universidad de La Frontera» +
«\n\n — Para Terminar el programa presiona aceptar —«);
}

/**
* Método main de la clase Problema3, en este método creo el objeto
* de la clase Problema3 el cual automaticamente llamará a su constructor.
*/

public static void main(String[] args) {
DescompNumPrimos instanciaDePrueba = new DescompNumPrimos();
} // Fin del main.
} // Fin de la clase.

Adicionalmente para los fanáticos de los números primos les dejo el enlace a un articulo bastante bueno sobre varias conjeturas de los mismos.

 

Link

DescompNumPrimos
Título: DescompNumPrimos (0 click)
Leyenda:
Filename: descompnumprimos.zip
Size: 2 KB
DescompNumPrimos.java_
Título: DescompNumPrimos.java_ (0 click)
Leyenda:
Filename: descompnumprimos-java_.txt
Size: 3 KB

Cambiar Proxy Universidad de La Frontera de forma fácil y transparente para el usuario.

13 septiembre, 2008 at 01:28

ScreenShot

Ya es un problema bastante extendido en la universidad el hecho de estar cambiando el maldito proxy de la Universidad de La Frontera cada vez que llegas a casa a conectarte a tu red wireless y viceversa cuando llegas nuevamente a la universidad. Si bien hay varias soluciones como pluggin para firefox por ejemplo, muchas veces terminan siendo bastante molestas, inútiles, lentas y hasta complicadas en algunos casos.

Hoy  les explicaré la forma que uso yo (en windows, analogamente se puede hacer en Linux) y que creo es el método más simple que he encontrado.

El concepto es hacer 2 accesos directos a un programa que transparentemente  cambia el proxy al hacer un solo click en él, para este caso yo he implementado una barra estilo MacOSX en  la cual he incoorporado los links , asi es que se ven algo así :

 

proxyOff_0 proxyOn

El código de cada uno es bastante simple y sólo basta con abrir un editor de texto y copiarlos y luego guardar el archivo como .vbs que es el lenguaje interpretado por el Windows Scripting Host de Microsoft  y que viene incluido por defecto en todos los windows.
En caso de ser una máquina basada en linux usar el scripting en bash análogo modificando las variables de entorno %HTTP_PROXY% y %FTP_PROXY%.
El código para cada una en widows sería :
Código ProxyOn.vbs

dim proxy

proxy = «ftp=proxy1.ufro.cl:80;http=proxy1.ufro.cl:80»

Set shell = CreateObject(«WScript.Shell»)

PE= «1»

dim strRegPath

strRegPath = «HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\»

Call shell.RegWrite( strRegPath & «ProxyServer», proxy, «REG_SZ»)
Call shell.RegWrite( strRegPath & «ProxyEnable», PE, «REG_DWORD»)

Set oWshShell = Nothing

Código ProxyOff.vbs

dim proxy

proxy = «ftp=proxy1.ufro.cl:80;http=proxy1.ufro.cl:80»

Set shell = CreateObject(«WScript.Shell»)

PE= «0»

dim strRegPath

strRegPath = «HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\»

Call shell.RegWrite( strRegPath & «ProxyServer», proxy, «REG_SZ»)
Call shell.RegWrite( strRegPath & «ProxyEnable», PE, «REG_DWORD»)

Set oWshShell = Nothing

Como hemos visto básicamente lo que hacen ambos script es modificar la variable del registro que indica el proxy del sistema, para verificar si cambio o no el proxy verificar la ventana de configuracion de proxy del sistema. Ojo que solo funciona para aquellas aplicaciones que toman el valor de esta variable del valor global del sistema. Pueden verificar si funciona en las opciones de red de Ms Internet Explorer.

Adicionalmente existe otra forma de hacerlo para lso fanáticos de las terminales. Ejecutar proxycfg desde una consola en dos y utilizar las opciones que indica en proxycfg -?, claro que para este caso ya no pasa a ser tan transparente para el usuario, sin embargo lo dejo como dato curioso.

Ojalá le sirva a más de alguien de la Universidad de La Frontera.

CambiarProxy
Título: CambiarProxy (0 click)
Leyenda:
Filename: cambiarproxy.zip
Size: 16 KB

Nebulosa de Monocerotis, firefox al extremo.

13 septiembre, 2008 at 00:07

V838 Monocerotis (V838 Mon)  estrella situada en la constelación de Monoceros.

El contorno que envuelve a la Nova es una nebulosa en expansión que se aleja de la estrella debido a la explosión.

SECUENCIA de la expansión de la nebulosa planetaria:

Como en el espacio, no existe arriba ni abajo….


CONLUSIÓN :  El software Opensource es universal.

demás está decir que ya no existe…. se va disolviendo en el espacio…..

Los inicios de LacosoX …..

12 septiembre, 2008 at 00:43

Acá dejo los inicios (totalmente cierto y real) de lacosox , nuestro primer teclado :

 

  

Tiempos aquellos en los que había que imaginarse el pc ;(, después vino la gloria con combo el gran pc de 100 mhz (lo dejaré para otra ocasión), hoy lacosox ya puede decir que cuenta con maquinas que aún no pasan de moda XD.

Olympic games owned Moments

25 agosto, 2008 at 19:35

Los juegos Olímpicos de Beijing no solo serán recordados como los juegos donde más records mundiales se rompieron, si no también por todos aquellos momentos que no lograron escapar del foco de los cientos de reporteros gráficos.

Otra vez, gracias a los chinos por permitirnos el deleite de estas imágenes :).

 

 

más imágenes después del salto..

Juicio a los chilenos ?

28 julio, 2008 at 03:30

Primera Parte

 

Segunda parte.