edu/upv_ehu/gbg/docencia/perfectos/PruebasConNumerosPerfectos.java
 1 package edu.upv_ehu.gbg.docencia.perfectos;
 2 
 3 /**
 4  * Realiza el cálculo de números perfectos mediante 5 aproximaciones.
 5  * De utilidad para ver cómo el planteamiento de algoritmos adecuados es importante,
 6  * y para ver las posibilidades que da Java para realizar cómputos complejos.
 7  * 
 8  * Cada ejecución se limita al cálculo de una cantidad de números "razonable" para que la ejecución se realice sin una espera excesiva 
 9  * (20 segs la suma de los 4 primeros métodos y 2 min el quinto en un i7_870 -8 hilos- a 2.93GHz).
10  * 
11  * @author german
12  */
13 public class PruebasConNumerosPerfectos {
14     private PruebasConNumerosPerfectos(){}
15     
16     //Topes para los distintos métodos probados.
17     private static final int TOPE_NAIF_Y_MEJOR=50_000; 
18     private static final int MAXRO_BUENO=32; 
19     private static final int MAXRO_BIGS=1300; 
20     private static final int MAXRO_BIGS_PARALLEL=30_000_000;
21     //Factor de certeza para el cálculo de primalidad con BigIntegers
22     private static final int CERTAINTY=8;
23     //Número de hilos a usar en el pool por el método paralelo
24     private static final int NUMERO_DE_HILOS=Runtime.getRuntime().availableProcessors()-2;
25     
26     /**
27      * Realiza el cálculo de números perfectos mediante 5 aproximaciones.
28      * 
29      * @param args the command line arguments
30      */
31     public static void main(String[] args) {
32         
33         //tiempo inicial para mostrar el acumulado hasta la obtención de cada perfecto.
34         //en los métodos noBIG
35         long elapsedTimeControl;
36         
37         //Naif
38         System.out.format("Probando método naif hasta %,d\n",TOPE_NAIF_Y_MEJOR);
39         elapsedTimeControl=System.currentTimeMillis();
40         CalculadorDiversoDeNumerosPerfectos.perfectosNaif(TOPE_NAIF_Y_MEJOR);
41         elapsedTimeControl-=System.currentTimeMillis();
42         System.out.println("Ejecutado en "+(-elapsedTimeControl)+" ms.----------------\n\n\n");
43 
44         //Mejor
45         System.out.format("Probando método major hasta %,d\n",TOPE_NAIF_Y_MEJOR);
46         elapsedTimeControl=System.currentTimeMillis();
47         CalculadorDiversoDeNumerosPerfectos.perfectosMejor(TOPE_NAIF_Y_MEJOR);
48         elapsedTimeControl-=System.currentTimeMillis();
49         System.out.println("Ejecutado en "+(-elapsedTimeControl)+" ms.----------------\n\n\n");
50 
51         //Bueno
52         System.out.format("Probando método bueno hasta la potencia %,d\n",MAXRO_BUENO);
53         elapsedTimeControl=System.currentTimeMillis();
54         CalculadorDiversoDeNumerosPerfectos.perfectosBueno(MAXRO_BUENO);
55         elapsedTimeControl-=System.currentTimeMillis();
56         System.out.println("Ejecutado en "+(-elapsedTimeControl)+" ms.----------------\n\n\n");
57 
58         //Big
59         System.out.format("Probando método bueno hasta la potencia ro= %,d\n",MAXRO_BIGS);
60         CalculadorDiversoDeNumerosPerfectos.perfectosBig(MAXRO_BIGS,CERTAINTY);
61         System.out.println("----------------\n\n\n");
62 
63         //Threaded
64         System.out.format("Probando método bueno en paralelo hasta la potencia ro= %,d\n",MAXRO_BIGS_PARALLEL);
65         CalculadorDiversoDeNumerosPerfectos.perfectosBigThreaded(MAXRO_BIGS_PARALLEL,CERTAINTY,NUMERO_DE_HILOS);
66         System.out.println("----------------\n\n\n");
67 
68     }
69 
70 }
71