-
Notifications
You must be signed in to change notification settings - Fork 0
/
randomGenerator.java
138 lines (106 loc) · 3.4 KB
/
randomGenerator.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
import java.lang.Math.*;
import java.math.BigInteger;
import java.math.BigDecimal;
import java.lang.String.*;
import java.util.Scanner;
class randomGenerator{
final BigInteger a,dosE31menos1,q,r;
randomGenerator()
{
//ejemplo26_3
a = BigDecimal.valueOf(Math.pow(7,5)).toBigInteger();
dosE31menos1 = BigDecimal.valueOf((Math.pow(2,31))-1).toBigInteger();
q = dosE31menos1.divide(a);
r = dosE31menos1.mod(a);
//fin ejemplo26_3
}
int random(int semilla,int nNum)
{
if(nNum == 0) return 0;
return random(((5*semilla)+1)%16,nNum-1);
}
int ejemplo26_1a(int semilla)
{
return (5*semilla)%(int)Math.pow(2,5);
}
int ejemplo26_1b(int semilla)
{
return (7*semilla)%(int)Math.pow(2,5);
}
int ejemplo26_2(int semilla)
{
return (3*semilla)%31;
}
BigInteger ejemplo26_3(BigInteger semilla,int nNum)
{
BigInteger x_div_q = semilla.divide(q);
BigInteger x_mod_q = semilla.mod(q);
BigInteger semilla_new = (a.multiply(x_mod_q)).subtract(r.multiply(x_div_q));
BigDecimal sem_sol,m_sol = new BigDecimal(dosE31menos1);
for(int i=0 ; i<=nNum-1 ; ++i)
{
x_div_q = semilla.divide(q);
x_mod_q = semilla.mod(q);
semilla_new = (a.multiply(x_mod_q)).subtract(r.multiply(x_div_q));
if(semilla_new.compareTo(BigInteger.ZERO) > 0 )
semilla = semilla_new;
else
semilla = semilla_new.add(dosE31menos1);
}
return semilla;
}
BigInteger UnEjemplo26_3(BigInteger semilla)
{
BigInteger x_div_q = semilla.divide(q),x_mod_q = semilla.mod(q);
BigInteger semilla_new = (a.multiply(x_mod_q)).subtract(r.multiply(x_div_q));
BigDecimal sem_sol,m_sol = new BigDecimal(dosE31menos1);
x_div_q = semilla.divide(q);
x_mod_q = semilla.mod(q);
semilla_new = (a.multiply(x_mod_q)).subtract(r.multiply(x_div_q));
if(semilla_new.compareTo(BigInteger.ZERO) > 0 )
semilla = semilla_new;
else
semilla = semilla_new.add(dosE31menos1);
sem_sol = new BigDecimal(semilla);
return semilla;
}
BigInteger UnEjemplo26_42(BigInteger[] s)
{
BigInteger cien57 = new BigInteger("157"),cien46 = new BigInteger("146"), cien42 = new BigInteger("142");
BigInteger qW = new BigInteger("32363"),qX = new BigInteger("31727"),qY = new BigInteger("31657");
BigInteger qWmenos1 = new BigInteger("32362");
s[0] = cien57.multiply(s[0]).mod(qW);
s[1] = cien46.multiply(s[1]).mod(qX);
s[2] = cien42.multiply(s[2]).mod(qY);
s[3] = s[0].subtract(s[1]).add(s[2]).mod(qWmenos1);
return s[3];
}
BigInteger fishman_moore1(BigInteger semilla)
{
BigInteger m = new BigInteger("48271");
return m.multiply(semilla).mod(dosE31menos1);
}
BigInteger fishman_moore2(BigInteger semilla)
{
BigInteger m = new BigInteger("69621");
return m.multiply(semilla).mod(dosE31menos1);
}
BigInteger randu(BigInteger semilla)
{
BigInteger dosE16mas3 = BigDecimal.valueOf((Math.pow(2,16))+3).toBigInteger();
return (dosE16mas3.multiply(semilla)).mod(dosE31menos1.add(BigInteger.ONE));
}
public static void main(String[] args) {
BigInteger num = new BigInteger("1"),m = new BigInteger("2");
randomGenerator r = new randomGenerator();
int k = 0;
for(int i=0 ; i< 640 ;++i)
{
num = r.randu(num);
System.out.println("numero: "+num);
num = num.mod(m);
System.out.println("numero: "+num);
System.out.println("int: "+num);
}
}
}