random 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +32 -0
- data/README +83 -0
- data/Rakefile +247 -0
- data/TODO +4 -0
- data/VERSION +1 -0
- data/doc/simple_example.rb +17 -0
- data/ext/random/extconf.rb +9 -0
- data/ext/random/mersenne_twister_ext.c +465 -0
- data/lib/math/statistics/chi_square.rb +76 -0
- data/lib/math/statistics/table_chi_square_probabilities.html +472 -0
- data/lib/random.rb +7 -0
- data/lib/random/array_random_element.rb +6 -0
- data/lib/random/random_number_generator.rb +196 -0
- data/lib/random/testing.rb +35 -0
- data/test/acceptance/wagner_distribution_1_0/testWagner.out +625 -0
- data/test/acceptance/wagner_distribution_1_0/test_compare_to_wagners_test_output.rb +91 -0
- data/test/performance/test_mersenne_twister.rb +20 -0
- data/test/unit/#mt19937ar.c# +190 -0
- data/test/unit/expected_mersenne_4357.txt +200 -0
- data/test/unit/test_chi_square.rb +25 -0
- data/test/unit/test_mersenne_twister.rb +131 -0
- data/test/unit/test_random_number_generator.rb +168 -0
- data/test/unit/test_random_testing.rb +22 -0
- data/test/unit/test_rng.rb +9 -0
- metadata +71 -0
@@ -0,0 +1,91 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
|
3
|
+
require 'random'
|
4
|
+
include Random
|
5
|
+
|
6
|
+
class ATestWagnerCompare < Test::Unit::TestCase
|
7
|
+
# MTRand::uint32 bigSeed[4] = { 0x123, 0x234, 0x345, 0x456 };
|
8
|
+
BigSeed = [0x123, 0x234, 0x345, 0x456]
|
9
|
+
|
10
|
+
# MTRand::uint32 oneSeed = 4357UL;
|
11
|
+
OneSeed = 4357
|
12
|
+
|
13
|
+
def read_from_file_at(filename, start_line,
|
14
|
+
converter = :to_i,
|
15
|
+
num_numbers = 1000, num_on_each_line = 5)
|
16
|
+
|
17
|
+
read_nums, str_len, state = [], start_line.length, :seeking
|
18
|
+
|
19
|
+
fpath = File.join(File.dirname(__FILE__), filename)
|
20
|
+
IO.readlines(fpath).each do |line|
|
21
|
+
if state == :seeking && (line[0, str_len] == start_line)
|
22
|
+
state = :reading
|
23
|
+
elsif state == :reading
|
24
|
+
if line =~ /(\d+\s+)+/
|
25
|
+
read_nums.concat( line.split.map {|n| n.strip.send(converter)} )
|
26
|
+
else
|
27
|
+
# We are ready and can abort
|
28
|
+
break
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
if read_nums.length != num_numbers
|
34
|
+
raise "Expected #{num_numbers} numbers but found #{read_nums.length}"
|
35
|
+
else
|
36
|
+
return read_nums
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def take_next(mt, num, &block)
|
41
|
+
block ||= proc {mt.next}
|
42
|
+
Array.new(num).map {block.call(mt)}
|
43
|
+
end
|
44
|
+
|
45
|
+
def assert_float_arrays_equal(expected, actual, delta)
|
46
|
+
assert_equal(expected.length, actual.length)
|
47
|
+
0.upto(expected.length) do |i|
|
48
|
+
assert_in_delta(expected[i], actual[i], delta)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_01_wagner_big_seed
|
53
|
+
expected =
|
54
|
+
read_from_file_at("testWagner.out",
|
55
|
+
"Test of random integer generation:")
|
56
|
+
|
57
|
+
mt = MersenneTwister.new(BigSeed)
|
58
|
+
assert_equal(expected, take_next(mt, expected.length))
|
59
|
+
|
60
|
+
expected_floats =
|
61
|
+
read_from_file_at("testWagner.out",
|
62
|
+
"Test of random real number [0,1) generation:",
|
63
|
+
:to_f)
|
64
|
+
actual = take_next(mt, expected.length) {|m| m.rand_float_excl}
|
65
|
+
assert_float_arrays_equal(expected_floats, actual, 0.0000001)
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_02_wagner_one_seed
|
69
|
+
expected_floats =
|
70
|
+
read_from_file_at("testWagner.out",
|
71
|
+
"Test of random real number [0,1] generation:",
|
72
|
+
:to_f)
|
73
|
+
mt = MersenneTwister.new(OneSeed)
|
74
|
+
actual = take_next(mt, expected_floats.length) {|m| m.rand_float}
|
75
|
+
assert_float_arrays_equal(expected_floats, actual, 0.0000001)
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_03_wagner_integer_range_test
|
79
|
+
mt = MersenneTwister.new
|
80
|
+
10000.times do
|
81
|
+
r = mt.rand_int_limited(17)
|
82
|
+
assert((0 <= r) && (r <= 17), "r = #{r}")
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_04_autoseed_uniqueness_test
|
87
|
+
m1, m2, m3 = MersenneTwister.new, MersenneTwister.new, MersenneTwister.new
|
88
|
+
v1, v2, v3 = m1.rand_float, m2.rand_float, m3.rand_float
|
89
|
+
assert(v1 != v2 || v2 != v3 || v1 != v3)
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'benchmark'
|
2
|
+
require 'rubygems'
|
3
|
+
|
4
|
+
require 'random'
|
5
|
+
include Random
|
6
|
+
|
7
|
+
NumInts = 1e6.to_i
|
8
|
+
|
9
|
+
Benchmark.bm(10) do |b|
|
10
|
+
b.report("Instantiating MTs") do
|
11
|
+
1e4.to_i.times {mt = MersenneTwister.new(rand(1e5))}
|
12
|
+
end
|
13
|
+
|
14
|
+
mt = MersenneTwister.new(rand(1e6))
|
15
|
+
b.report("Gen'ing #{NumInts} ints") do
|
16
|
+
NumInts.times {mt.next}
|
17
|
+
end
|
18
|
+
|
19
|
+
#b.report("Generating #{NumInts} ints") {mt.next}
|
20
|
+
end
|
@@ -0,0 +1,190 @@
|
|
1
|
+
/*
|
2
|
+
A C-program for MT19937, with initialization improved 2002/1/26.
|
3
|
+
Coded by Takuji Nishimura and Makoto Matsumoto.
|
4
|
+
|
5
|
+
Before using, initialize the state by using init_genrand(seed)
|
6
|
+
or init_by_array(init_key, key_length).
|
7
|
+
|
8
|
+
Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,
|
9
|
+
All rights reserved.
|
10
|
+
|
11
|
+
Redistribution and use in source and binary forms, with or without
|
12
|
+
modification, are permitted provided that the following conditions
|
13
|
+
are met:
|
14
|
+
|
15
|
+
1. Redistributions of source code must retain the above copyright
|
16
|
+
notice, this list of conditions and the following disclaimer.
|
17
|
+
|
18
|
+
2. Redistributions in binary form must reproduce the above copyright
|
19
|
+
notice, this list of conditions and the following disclaimer in the
|
20
|
+
documentation and/or other materials provided with the distribution.
|
21
|
+
|
22
|
+
3. The names of its contributors may not be used to endorse or promote
|
23
|
+
products derived from this software without specific prior written
|
24
|
+
permission.
|
25
|
+
|
26
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
27
|
+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
28
|
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
29
|
+
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
30
|
+
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
31
|
+
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
32
|
+
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
33
|
+
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
34
|
+
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
35
|
+
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
36
|
+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
37
|
+
|
38
|
+
|
39
|
+
Any feedback is very welcome.
|
40
|
+
http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html
|
41
|
+
email: m-mat @ math.sci.hiroshima-u.ac.jp (remove space)
|
42
|
+
*/
|
43
|
+
|
44
|
+
#include <stdio.h>
|
45
|
+
|
46
|
+
/* Period parameters */
|
47
|
+
#define N 624
|
48
|
+
#define M 397
|
49
|
+
#define MATRIX_A 0x9908b0dfUL /* constant vector a */
|
50
|
+
#define UPPER_MASK 0x80000000UL /* most significant w-r bits */
|
51
|
+
#define LOWER_MASK 0x7fffffffUL /* least significant r bits */
|
52
|
+
|
53
|
+
static unsigned long mt[N]; /* the array for the state vector */
|
54
|
+
static int mti=N+1; /* mti==N+1 means mt[N] is not initialized */
|
55
|
+
|
56
|
+
/* initializes mt[N] with a seed */
|
57
|
+
void init_genrand(unsigned long s)
|
58
|
+
{
|
59
|
+
mt[0]= s & 0xffffffffUL;
|
60
|
+
for (mti=1; mti<N; mti++) {
|
61
|
+
mt[mti] =
|
62
|
+
(1812433253UL * (mt[mti-1] ^ (mt[mti-1] >> 30)) + mti);
|
63
|
+
/* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */
|
64
|
+
/* In the previous versions, MSBs of the seed affect */
|
65
|
+
/* only MSBs of the array mt[]. */
|
66
|
+
/* 2002/01/09 modified by Makoto Matsumoto */
|
67
|
+
mt[mti] &= 0xffffffffUL;
|
68
|
+
/* for >32 bit machines */
|
69
|
+
}
|
70
|
+
}
|
71
|
+
|
72
|
+
/* initialize by an array with array-length */
|
73
|
+
/* init_key is the array for initializing keys */
|
74
|
+
/* key_length is its length */
|
75
|
+
/* slight change for C++, 2004/2/26 */
|
76
|
+
void init_by_array(unsigned long init_key[], int key_length)
|
77
|
+
{
|
78
|
+
int i, j, k;
|
79
|
+
init_genrand(19650218UL);
|
80
|
+
i=1; j=0;
|
81
|
+
k = (N>key_length ? N : key_length);
|
82
|
+
for (; k; k--) {
|
83
|
+
mt[i] = (mt[i] ^ ((mt[i-1] ^ (mt[i-1] >> 30)) * 1664525UL))
|
84
|
+
+ init_key[j] + j; /* non linear */
|
85
|
+
mt[i] &= 0xffffffffUL; /* for WORDSIZE > 32 machines */
|
86
|
+
i++; j++;
|
87
|
+
if (i>=N) { mt[0] = mt[N-1]; i=1; }
|
88
|
+
if (j>=key_length) j=0;
|
89
|
+
}
|
90
|
+
for (k=N-1; k; k--) {
|
91
|
+
mt[i] = (mt[i] ^ ((mt[i-1] ^ (mt[i-1] >> 30)) * 1566083941UL))
|
92
|
+
- i; /* non linear */
|
93
|
+
mt[i] &= 0xffffffffUL; /* for WORDSIZE > 32 machines */
|
94
|
+
i++;
|
95
|
+
if (i>=N) { mt[0] = mt[N-1]; i=1; }
|
96
|
+
}
|
97
|
+
|
98
|
+
mt[0] = 0x80000000UL; /* MSB is 1; assuring non-zero initial array */
|
99
|
+
}
|
100
|
+
|
101
|
+
/* generates a random number on [0,0xffffffff]-interval */
|
102
|
+
unsigned long genrand_int32(void)
|
103
|
+
{
|
104
|
+
unsigned long y;
|
105
|
+
static unsigned long mag01[2]={0x0UL, MATRIX_A};
|
106
|
+
/* mag01[x] = x * MATRIX_A for x=0,1 */
|
107
|
+
|
108
|
+
if (mti >= N) { /* generate N words at one time */
|
109
|
+
int kk;
|
110
|
+
|
111
|
+
if (mti == N+1) /* if init_genrand() has not been called, */
|
112
|
+
init_genrand(5489UL); /* a default initial seed is used */
|
113
|
+
|
114
|
+
for (kk=0;kk<N-M;kk++) {
|
115
|
+
y = (mt[kk]&UPPER_MASK)|(mt[kk+1]&LOWER_MASK);
|
116
|
+
mt[kk] = mt[kk+M] ^ (y >> 1) ^ mag01[y & 0x1UL];
|
117
|
+
}
|
118
|
+
for (;kk<N-1;kk++) {
|
119
|
+
y = (mt[kk]&UPPER_MASK)|(mt[kk+1]&LOWER_MASK);
|
120
|
+
mt[kk] = mt[kk+(M-N)] ^ (y >> 1) ^ mag01[y & 0x1UL];
|
121
|
+
}
|
122
|
+
y = (mt[N-1]&UPPER_MASK)|(mt[0]&LOWER_MASK);
|
123
|
+
mt[N-1] = mt[M-1] ^ (y >> 1) ^ mag01[y & 0x1UL];
|
124
|
+
|
125
|
+
mti = 0;
|
126
|
+
}
|
127
|
+
|
128
|
+
y = mt[mti++];
|
129
|
+
|
130
|
+
/* Tempering */
|
131
|
+
y ^= (y >> 11);
|
132
|
+
y ^= (y << 7) & 0x9d2c5680UL;
|
133
|
+
y ^= (y << 15) & 0xefc60000UL;
|
134
|
+
y ^= (y >> 18);
|
135
|
+
|
136
|
+
return y;
|
137
|
+
}
|
138
|
+
|
139
|
+
/* generates a random number on [0,0x7fffffff]-interval */
|
140
|
+
long genrand_int31(void)
|
141
|
+
{
|
142
|
+
return (long)(genrand_int32()>>1);
|
143
|
+
}
|
144
|
+
|
145
|
+
/* generates a random number on [0,1]-real-interval */
|
146
|
+
double genrand_real1(void)
|
147
|
+
{
|
148
|
+
return genrand_int32()*(1.0/4294967295.0);
|
149
|
+
/* divided by 2^32-1 */
|
150
|
+
}
|
151
|
+
|
152
|
+
/* generates a random number on [0,1)-real-interval */
|
153
|
+
double genrand_real2(void)
|
154
|
+
{
|
155
|
+
return genrand_int32()*(1.0/4294967296.0);
|
156
|
+
/* divided by 2^32 */
|
157
|
+
}
|
158
|
+
|
159
|
+
/* generates a random number on (0,1)-real-interval */
|
160
|
+
double genrand_real3(void)
|
161
|
+
{
|
162
|
+
return (((double)genrand_int32()) + 0.5)*(1.0/4294967296.0);
|
163
|
+
/* divided by 2^32 */
|
164
|
+
}
|
165
|
+
|
166
|
+
/* generates a random number on [0,1) with 53-bit resolution*/
|
167
|
+
double genrand_res53(void)
|
168
|
+
{
|
169
|
+
unsigned long a=genrand_int32()>>5, b=genrand_int32()>>6;
|
170
|
+
return(a*67108864.0+b)*(1.0/9007199254740992.0);
|
171
|
+
}
|
172
|
+
/* These real versions are due to Isaku Wada, 2002/01/09 added */
|
173
|
+
|
174
|
+
int main(void)
|
175
|
+
{
|
176
|
+
int i;
|
177
|
+
unsigned long init[4]={0x123, 0x234, 0x345, 0x456}, length=4;
|
178
|
+
init_by_array(init, length);
|
179
|
+
printf("1000 outputs of genrand_int32()\n");
|
180
|
+
for (i=0; i<1000; i++) {
|
181
|
+
printf("%10lu ", genrand_int32());
|
182
|
+
if (i%5==4) printf("\n");
|
183
|
+
}
|
184
|
+
printf("\n1000 outputs of genrand_real2()\n");
|
185
|
+
for (i=0; i<1000; i++) {
|
186
|
+
printf("%10.8f ", genrand_real2());
|
187
|
+
if (i%5==4) printf("\n");
|
188
|
+
}
|
189
|
+
return 0;
|
190
|
+
}
|
@@ -0,0 +1,200 @@
|
|
1
|
+
2867219139 1585203162 3113124129 2953900839 2463794868
|
2
|
+
3482265796 1164297043 3598195569 589972756 4112233867
|
3
|
+
767115311 4093075447 1322433849 3357085324 3300048468
|
4
|
+
3649464345 3676604632 1475054104 2601934239 3420804864
|
5
|
+
2492391180 28597038 1901037238 1209433535 3580317774
|
6
|
+
2488297452 79873538 3308484072 2913896343 4166196021
|
7
|
+
1930853421 3313543893 2603730014 2827553081 1952080899
|
8
|
+
1405101208 1959413290 2221997165 4110132150 1025637693
|
9
|
+
3670222467 3930802957 2581008338 1350592177 3907543700
|
10
|
+
4014701607 935323183 1742076441 3183014990 3775329649
|
11
|
+
2670402585 631538770 3348109412 2875142640 1153190187
|
12
|
+
1034841106 4215431531 3369145821 2443967621 489641649
|
13
|
+
1500338112 3753983456 714552875 1260890119 2952668397
|
14
|
+
3337192800 555421782 74804828 1151768793 1410928776
|
15
|
+
1120209439 2228198263 4057501661 3114914981 2544059595
|
16
|
+
3532152016 2287564919 2032846052 1496843742 3333090545
|
17
|
+
1817300007 250812909 1159923179 685307794 3541764804
|
18
|
+
461984834 3147015419 3371051674 740493100 1639766659
|
19
|
+
890836426 1816610558 740465142 185885280 4259873427
|
20
|
+
3958263241 4265440603 921638366 4154579172 805230647
|
21
|
+
3014407950 1805221957 561367725 2705796996 1548190021
|
22
|
+
2511308322 1037370857 3468383218 2263520462 100585698
|
23
|
+
1357493989 3614308996 171284736 2282220711 3523042469
|
24
|
+
2348826997 107252578 4276234757 3467471468 226242558
|
25
|
+
1135756939 1172828762 1603997125 2391541156 3151990464
|
26
|
+
1103261409 3154811332 1113077002 3536625341 2952420703
|
27
|
+
1239175044 2568687405 2847842220 3298739581 3765822280
|
28
|
+
1818781797 1788591806 1276077776 949399679 539881640
|
29
|
+
2515373476 3278313288 2195264511 3140718958 2245786462
|
30
|
+
3972928638 927276666 511152533 2786021231 3889288448
|
31
|
+
1460095448 3481321755 2645725544 2557599731 3008353305
|
32
|
+
2338169325 3715786542 2327664598 1670522570 398515741
|
33
|
+
3912248287 1871479044 819271481 1603628159 2242972174
|
34
|
+
3206947715 2994316262 3479367748 2428416502 3005191888
|
35
|
+
596767713 4276386271 629871933 1632138881 2115083989
|
36
|
+
801211500 3827872169 1960552366 1795052222 2979479912
|
37
|
+
87338528 3149244595 643926064 3517042602 2067922190
|
38
|
+
2800708034 196411345 1750850708 1469706228 2911845443
|
39
|
+
1988965279 2800355451 2805480064 2192011017 3674906385
|
40
|
+
2681712455 4227392471 2728849226 3329705101 1906618821
|
41
|
+
3142299622 1154270206 4163694621 1798769436 4013849691
|
42
|
+
2028970854 2216068645 1849210321 4107229332 2515252953
|
43
|
+
3522279734 1983720317 2024886240 3537672193 3930217610
|
44
|
+
72039252 1780891549 3528367504 251685934 1188909432
|
45
|
+
1947153461 370404364 3813997465 162450456 3817237392
|
46
|
+
3024813148 114391043 3190750639 2737018031 1006449521
|
47
|
+
3646726966 287956073 1149908372 487404965 2110874122
|
48
|
+
4169788922 2708120708 1662089132 509477256 1099251950
|
49
|
+
2939553466 4116915810 2237150968 2532635264 1924974342
|
50
|
+
2275083438 2001527850 85819681 1193976695 2861341617
|
51
|
+
1014135054 996772449 4164228014 1090591843 2130489362
|
52
|
+
769151670 995393661 930169499 53462752 966539569
|
53
|
+
1906551696 3460997327 3881239157 2276159353 119179965
|
54
|
+
1765229953 2268172609 1085009887 2675771386 458208333
|
55
|
+
1454994770 1017850103 2649434515 2999463338 388687986
|
56
|
+
3415289788 3023627127 1525959519 2452400350 2054320272
|
57
|
+
3631689268 2249184966 2108263178 2566643186 614451766
|
58
|
+
1697197121 1906804322 1965059615 3685123413 1808965526
|
59
|
+
3338843213 3764537527 3904177263 654414333 3369183195
|
60
|
+
172707682 1789534658 99114865 197192909 1307666933
|
61
|
+
3275439681 3162223316 2159224432 2431824578 479324619
|
62
|
+
1925592859 2627879461 792010626 472668456 4177737701
|
63
|
+
2599283126 3434190900 1904530818 1875549291 2782382323
|
64
|
+
1854703958 335047755 782741003 3349774673 2070491163
|
65
|
+
1444691247 4133539299 3021083499 2858372993 4249693401
|
66
|
+
3115492149 2825785659 3224153798 4151435371 4286292998
|
67
|
+
1256416790 1517863100 745532812 2757126489 4013428350
|
68
|
+
2423548174 2188411943 3829463160 1559482295 745669519
|
69
|
+
3439972168 161134094 3704705522 2092939826 3727766120
|
70
|
+
1109991787 3566213491 1293706699 1909349236 2420196524
|
71
|
+
2304746689 3635143867 3551959793 4288618652 669034647
|
72
|
+
3741111948 2199915868 2168112271 1697649112 1070896705
|
73
|
+
2790677773 929567277 3818265352 1552321291 1984195592
|
74
|
+
2012174866 3313686631 3187267079 3743463291 3456016892
|
75
|
+
3700547177 673536746 3681166837 639979024 908071910
|
76
|
+
285351138 3480863067 2726064042 3433216772 4179945392
|
77
|
+
3619009940 2905120322 1106151469 2104819134 3436744154
|
78
|
+
2515523866 2371838050 1019585697 3627952443 875737047
|
79
|
+
370873717 2940893797 685464258 748098950 3797185507
|
80
|
+
1051282146 2282833018 477323378 4052824808 3410768817
|
81
|
+
2708164210 3910080099 801512007 3165259863 3098921372
|
82
|
+
202576730 3056859886 3173659693 1703200672 1431918718
|
83
|
+
1548107888 4098890898 4025128517 1676726643 3185240256
|
84
|
+
1377418328 682127434 229406958 536272508 1302848757
|
85
|
+
2222642426 3401319609 342519951 3491817370 880356224
|
86
|
+
2288503572 2560186828 904726294 2902811194 2239545174
|
87
|
+
1380829270 1525997083 799156132 3864212205 768044736
|
88
|
+
2575515908 3700396389 1384921240 1784666717 2072282702
|
89
|
+
2273112071 73034983 1893910430 554586922 1002452453
|
90
|
+
244890730 1914712138 3103142789 4100378990 15082512
|
91
|
+
4138839635 286473904 28127927 4285718216 3253349861
|
92
|
+
848606688 751913560 2912664004 4265187531 3287406403
|
93
|
+
3072476689 1465740219 1119222960 1706572418 1637696965
|
94
|
+
1301369982 994855959 3172254721 2787055691 4037606898
|
95
|
+
2001758001 3068451101 1913702326 164846220 3386718455
|
96
|
+
2360582776 538955390 1122472306 2163787896 3820825269
|
97
|
+
473138414 403084459 780682841 1916392897 2137309162
|
98
|
+
2973130398 1560974537 383098889 2823811259 95656605
|
99
|
+
1100898974 2054803549 1432869091 39447374 3865802542
|
100
|
+
2243381851 326718209 3764656818 3855400005 3824649153
|
101
|
+
1760031250 3890102346 38307054 3248874532 997675099
|
102
|
+
1302054089 1134435193 3758588966 3856615910 3995873394
|
103
|
+
1997896248 2341490681 4139020774 4219325865 2880626819
|
104
|
+
1553845962 739906589 2668272545 1218350904 1726725379
|
105
|
+
3948906843 1266205878 3012873230 2240549028 377137844
|
106
|
+
907277693 2560807557 211027090 1865109379 1680481889
|
107
|
+
3006556199 1195935070 538932664 781359924 1623787727
|
108
|
+
2139406835 695091061 1267298086 644554442 2677351606
|
109
|
+
1079279370 2545101579 536974673 3409890995 328220108
|
110
|
+
3828121455 2972265230 2639000446 208138402 3320584784
|
111
|
+
3363876703 2161783108 3027769253 2818364264 1836513581
|
112
|
+
2700089162 3711109606 2707396532 2252522835 542106924
|
113
|
+
290861120 65506152 4196413643 358020078 911900450
|
114
|
+
2802065405 3188834047 616484753 4176172380 3492813945
|
115
|
+
795652043 342823405 3851175499 2477619202 974180631
|
116
|
+
2070155077 3048615955 3495083384 650122283 14857981
|
117
|
+
1511525369 1296338035 240671856 4168080735 2161570494
|
118
|
+
148980922 962978395 1307706563 3324956171 1322718131
|
119
|
+
1734073640 2389532755 382604108 432552756 311652177
|
120
|
+
2123865787 4157917041 3154366327 2978207584 1290868994
|
121
|
+
2007821863 3260860131 2640548616 3404112149 1612513188
|
122
|
+
3058779399 4287633829 2922820044 3033015498 3511571915
|
123
|
+
991947766 643957286 2436721391 3576617627 2376996434
|
124
|
+
1222099653 3675388593 1992634707 2782662035 1200611853
|
125
|
+
159589769 679751733 3161948893 589403970 1044672925
|
126
|
+
1965277612 1713774522 1215426812 1813238647 3046834204
|
127
|
+
1409105205 3251078319 3532268691 2616009849 1386097548
|
128
|
+
174492254 3978807460 2821108637 2107299989 3461277028
|
129
|
+
491302117 2132304916 4182289785 2030842100 926165801
|
130
|
+
1843009221 4893907 1091318508 2578976004 3429416159
|
131
|
+
3465002536 4047073710 3470663786 489006494 1589495825
|
132
|
+
2487643370 50052787 4184895002 478354171 4082727190
|
133
|
+
2983387324 3988219089 2947112381 2737973843 650841551
|
134
|
+
207036108 469279577 2683578043 3017632501 163011627
|
135
|
+
1693305508 3903975904 3023727891 2966166673 1330783281
|
136
|
+
714904080 487395952 3194176556 132096950 3471991421
|
137
|
+
3333279298 964375359 1852875757 3398189707 1367148533
|
138
|
+
3028366754 1975064118 1410547156 930454876 1797368724
|
139
|
+
1024933376 4216347534 2926795400 2780961322 2950171792
|
140
|
+
254604891 2461064346 3101055432 4066457036 2276047585
|
141
|
+
2005729740 702724217 352362105 4032003380 3868709967
|
142
|
+
3062450037 1984810322 1122228626 1836441070 3049160795
|
143
|
+
3505191268 1416228722 3011433267 3618970400 2634380746
|
144
|
+
521960665 1258860577 3646964245 482700194 576607559
|
145
|
+
1025672363 1619715344 2931841378 2383672736 4168420462
|
146
|
+
3899810386 2725154884 1643576117 4113444955 1695213625
|
147
|
+
929397946 4130386425 3278249905 338698100 2621561873
|
148
|
+
760291850 1827462673 2953977437 2802490860 952114118
|
149
|
+
1564374766 1510012037 2517230207 2879255110 1376858550
|
150
|
+
545337582 275466025 1766675460 841474537 2279046836
|
151
|
+
160777324 1685578416 97066962 70420376 2697708528
|
152
|
+
1312050661 277966306 2512268326 3560039935 3707673740
|
153
|
+
1802069091 2214309607 3679963423 2799689014 2064212423
|
154
|
+
2518670131 1071037431 3289103113 2832242556 626819162
|
155
|
+
2821900349 4205402301 3092543042 1327800001 2111287012
|
156
|
+
3356990396 2106560895 980585039 2374462023 3972980985
|
157
|
+
1815212590 2934114838 2466983682 2647086546 1917133448
|
158
|
+
757801743 2800426440 3462078459 1864979383 3711607473
|
159
|
+
3244474925 1082752058 1953813482 3572643973 1845637828
|
160
|
+
1693567413 1911166886 13616514 1527215536 944105697
|
161
|
+
3720955806 3011125828 3659854035 3491170189 1206734392
|
162
|
+
2464190967 259012728 351640621 348063345 237157049
|
163
|
+
2592736807 3472084471 967215995 1941684155 3333469178
|
164
|
+
4243822747 2837898655 2173645309 2144297387 4085774723
|
165
|
+
2739089063 1721981340 1029091741 3863714757 3169542690
|
166
|
+
1736267037 1087293093 3741407119 3003360275 4039152624
|
167
|
+
965607200 1494605756 2700809461 1862970278 2060187203
|
168
|
+
2636522014 2296966448 2138904618 830770044 2409839298
|
169
|
+
946077889 676163933 2337773259 1967578486 1364110453
|
170
|
+
1120981439 1505148538 3176892430 3788500489 2221440449
|
171
|
+
2877805945 1848017526 1060239654 2981107887 394732496
|
172
|
+
775694702 2465430652 256035109 672200319 4034366090
|
173
|
+
652227015 224664253 2832534389 2590752268 1616461983
|
174
|
+
474981047 1729743343 1033065486 3679817635 1945677673
|
175
|
+
4142123708 3441705395 3623363652 2888854797 3848994849
|
176
|
+
2774468965 733621242 1559397411 610848083 1861857918
|
177
|
+
290039215 1969085557 2949458979 4146721138 1709209040
|
178
|
+
3104641793 2414678267 3702112927 1922014713 3006301085
|
179
|
+
2557432695 1953275956 3475362527 3440824021 1879890923
|
180
|
+
4118996054 524339283 2248075324 1608569809 1946682979
|
181
|
+
1598268490 3463673619 456566908 1513321122 1918511241
|
182
|
+
3005439161 1218124360 2614200732 1479017575 2505142496
|
183
|
+
3134113721 2091183380 2232940223 1740181808 2202332383
|
184
|
+
2146620821 2123780007 3400091025 3142337592 1128001831
|
185
|
+
3655589806 3699941203 871253103 1532083500 883298808
|
186
|
+
2042462485 1141767415 3305182865 2246327140 1481051047
|
187
|
+
2467236685 1053025675 1128030915 579308527 4094341357
|
188
|
+
3312590487 2638764195 4224606959 975347930 2780688281
|
189
|
+
3249107391 1737859059 562230366 3107238138 1630808317
|
190
|
+
3323952099 2688243612 1676966491 1391319909 1149056605
|
191
|
+
160522031 1888652620 1204167962 2599816629 4096616603
|
192
|
+
2153451204 2234463327 2254107492 2798858945 1904589021
|
193
|
+
3082279528 618798780 3162900214 746972615 4152315314
|
194
|
+
3641376911 347959902 847266746 3443266042 4212579027
|
195
|
+
2141521991 2369733694 4051999217 2434367934 2274132668
|
196
|
+
3939258516 365865295 1762948411 3765297135 4284895923
|
197
|
+
1178072377 1164762067 2304673964 2601931087 660951723
|
198
|
+
324246673 1237854749 1390986182 3123416686 3229473430
|
199
|
+
647145616 2228556457 3484897681 3854370955 3714649568
|
200
|
+
1924448690 275933853 3254129074 1742363440 1030650439
|