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