Sei sulla pagina 1di 2

1 import java.math.

*;
2 import java.util.*;
3
4 public class Algoritmos {
5
// Versin bsica que cuenta todos los divisores posibles entre 1 y el nmero
6
// Si dicho contador es 2, el nmero es primo, sino, no lo es.
7
public static boolean esPrimoV0(long n) {
8
long cont = 0;
9
long i=1;
10
while(i<=n) {
11
if(n % i == 0) cont++;
12
i++;
13
}
if(cont==2) return true;
14
15
else return false;
16
}
17
18
// Versin intermedia que verifica solamente hasta la mitad, dividiendo solamente
19
// por los impares.
20
public static boolean esPrimoV1(long n) {
21
long i=3;
22
if(n==2) return true;
// El 2 es primo
23
if(n%2==0) return false;
// Si es par pero no es el dos, no es primo
24
while(i<n/2) {
// Se divide solo hasta la mitad de n
25
if(n % i == 0) return false;
// Si es divisible, automaticamente se descarta
26
i+=2;
27
}
28
return true;
// Si no es divisible por ninguno, es primo.
29
30
}
31
32
// Versin mejorada dividiendo hasta la raiz del numero, y solamente por
33
// los impares
34
public static boolean esPrimoV2(long n) {
35
long i=3;
36
long raiz = (long) Math.sqrt(n);
// Se calcula la raiz una sola vez
37
38
if(n==2) return true;
// El 2 es primo
39
if(n%2==0) return false;
// Si es par, pero no es el 2, no es primo
40
while(i<=raiz) {
// Se divide solo hasta la raiz de n
41
42
if(n % i == 0) return false;
// Si es divisible, automaticamente se descarta
43
i+=2;
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62

}
return true;

// Si no es divisible por ninguno, es primo

}
// Versin que maneja la funcin isProbablePrime de la clase BigInteger. El numero se recibe en formato
// de cadena de caracteres.
public static boolean esPrimoV3(String n) {
BigInteger numero = new BigInteger(n);
if(numero.isProbablePrime(20)) return true;
else return false;
}
// Versin sobreescrita del mtodo esPrimoV3 que recibe un long y lo pasa a String para poder ejecutar
// el mtodo con la clase BigInteger.
public static boolean esPrimoV3(long n) {
return esPrimoV3(n+"");
}
// Versin recursiva

62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122 }

// Versin recursiva
public static long fibonacciV0(int n) {
if(n==0||n==1) return n;
return fibonacciV0(n-1)+fibonacciV0(n-2);
}
// Versin que utiliza la frmula que resuelve la recursividad
public static long fibonacciV1(int n) {
double raiz5 = Math.sqrt(5);
double x1
= (1+raiz5)/2;
double x2
= (1-raiz5)/2;
return (long) (1/raiz5 * ( Math.pow(x1,n) - Math.pow(x2,n)));
}
// Generar un vector de n nmeros aleatorios de tipo entero
public static int[] getVector(int n) {
int[] vector = new int[n];
Random
rnd = new Random();
for(int i=0; i<vector.length; i++) {
vector[i] = rnd.nextInt(10*n);
}
return vector;
}
// Mostrar un vector
public static void showVector(int [] vector) {
for(int i=0; i<vector.length; i++) {
System.out.printf("%8d", vector[i]);
if(i%10==0) System.out.println();
}
}
// Ordenacin bsica
public static void ordenarVector(int [] vector) {
int temporal;
for(int i=0; i<vector.length; i++) {
for(int j=i+1; j<vector.length; j++) {
if(vector[i] > vector[j]) {
temporal = vector[i];
vector[i] = vector[j];
vector[j] = temporal;
}
}
}
}
// Ordenar segn la funcin interna de Java
public static void ordenarVectorJava(int [] vector) {
Vector<Integer> v = new Vector<Integer>();
for(int x: vector) v.add(x);
try {
Collections.sort(v);
}
catch(Error ex) {
System.out.println("\nError: " + ex.getMessage());
System.exit(0);
}
for(int i=0; i<v.size(); i++) vector[i]=v.get(i);
}

Potrebbero piacerti anche