random 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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