summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorvlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4>2016-12-29 03:09:15 +0000
committervlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4>2016-12-29 03:09:15 +0000
commitdd702825b4fd55af077796664c4cde84e9f367cf (patch)
treef541c2a8bb2ae6ff1691e23567ba24a2602d8d7c /src
parentd034a3788e4ad2e7215066b5ec2ce06dc2f35574 (diff)
downloadmpfr-dd702825b4fd55af077796664c4cde84e9f367cf.tar.gz
Merged the latest changes from the trunk.
git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/branches/faithful@11102 280ebfd0-de03-0410-8827-d642c229c3f4
Diffstat (limited to 'src')
-rw-r--r--src/log.c15
-rw-r--r--src/mpfr-impl.h4
-rw-r--r--src/mul.c14
-rw-r--r--src/sqr.c9
-rw-r--r--src/sqrt.c689
-rw-r--r--src/sqrt_tab.h387
6 files changed, 336 insertions, 782 deletions
diff --git a/src/log.c b/src/log.c
index 2cc222d64..4b428070f 100644
--- a/src/log.c
+++ b/src/log.c
@@ -125,17 +125,24 @@ mpfr_log (mpfr_ptr r, mpfr_srcptr a, mpfr_rnd_t rnd_mode)
mpfr_exp_t cancel;
/* Calculus of m (depends on p)
- If mpfr_exp_t has N bits, then both (p + 1) / 2 and |exp_a| fit
- on N-2 bits, so that there cannot be an overflow.
- Note that exp_a - 1 is a constant in the loop (thus grouped). */
- m = (p + 1) / 2 - (exp_a - 1);
+ If mpfr_exp_t has N bits, then both (p + 3) / 2 and |exp_a| fit
+ on N-2 bits, so that there cannot be an overflow. */
+ m = (p + 3) / 2 - exp_a;
/* In standard configuration (_MPFR_EXP_FORMAT <= 3), one has
mpfr_exp_t <= long, so that the following assertion is always
true. */
MPFR_ASSERTN (m >= LONG_MIN && m <= LONG_MAX);
+ /* FIXME: Why 1 ulp and not 1/2 ulp? Ditto with some other ones
+ below. The error concerning the AGM should be explained since
+ 4/s is inexact (one needs a bound on its derivative). */
mpfr_mul_2si (tmp2, a, m, MPFR_RNDN); /* s=a*2^m, err<=1 ulp */
+ MPFR_ASSERTD (MPFR_EXP (tmp2) >= (p + 3) / 2);
+ /* [FIXME] and one can have the equality, even if p is even.
+ This means that if a is a power of 2 and p is even, then
+ s = (1/2) * 2^((p+2)/2) = 2^(p/2), so that the condition
+ s > 2^(p/2) from algorithms.tex is not satisfied. */
mpfr_div (tmp1, __gmpfr_four, tmp2, MPFR_RNDN);/* 4/s, err<=2 ulps */
mpfr_agm (tmp2, __gmpfr_one, tmp1, MPFR_RNDN); /* AG(1,4/s),err<=3 ulps */
mpfr_mul_2ui (tmp2, tmp2, 1, MPFR_RNDN); /* 2*AG(1,4/s), err<=3 ulps */
diff --git a/src/mpfr-impl.h b/src/mpfr-impl.h
index 5f2a550fe..0521a2193 100644
--- a/src/mpfr-impl.h
+++ b/src/mpfr-impl.h
@@ -2099,6 +2099,10 @@ __MPFR_DECLSPEC int mpfr_add1sp (mpfr_ptr, mpfr_srcptr,
mpfr_srcptr, mpfr_rnd_t);
__MPFR_DECLSPEC int mpfr_sub1sp (mpfr_ptr, mpfr_srcptr,
mpfr_srcptr, mpfr_rnd_t);
+__MPFR_DECLSPEC int mpfr_mul_1 (mpfr_ptr, mpfr_srcptr, mpfr_srcptr, mpfr_rnd_t,
+ mpfr_prec_t);
+__MPFR_DECLSPEC int mpfr_mul_2 (mpfr_ptr, mpfr_srcptr, mpfr_srcptr, mpfr_rnd_t,
+ mpfr_prec_t);
__MPFR_DECLSPEC int mpfr_can_round_raw (const mp_limb_t *,
mp_size_t, int, mpfr_exp_t, mpfr_rnd_t, mpfr_rnd_t, mpfr_prec_t);
diff --git a/src/mul.c b/src/mul.c
index 1c3ba3b4c..49ee9a636 100644
--- a/src/mul.c
+++ b/src/mul.c
@@ -208,9 +208,10 @@ mpfr_mul (mpfr_ptr a, mpfr_srcptr b, mpfr_srcptr c, mpfr_rnd_t rnd_mode)
/* Multiply 2 mpfr_t */
-/* special code for prec(a) < GMP_NUMB_BITS and
- prec(b), prec(c) <= GMP_NUMB_BITS */
-static int
+/* Special code for prec(a) < GMP_NUMB_BITS and
+ prec(b), prec(c) <= GMP_NUMB_BITS.
+ We export it since it is called from mpfr_sqr too. */
+int
mpfr_mul_1 (mpfr_ptr a, mpfr_srcptr b, mpfr_srcptr c, mpfr_rnd_t rnd_mode,
mpfr_prec_t p)
{
@@ -304,9 +305,10 @@ mpfr_mul_1 (mpfr_ptr a, mpfr_srcptr b, mpfr_srcptr c, mpfr_rnd_t rnd_mode,
}
}
-/* special code for GMP_NUMB_BITS < prec(a) < 2*GMP_NUMB_BITS and
- GMP_NUMB_BITS < prec(b), prec(c) <= 2*GMP_NUMB_BITS */
-static int
+/* Special code for GMP_NUMB_BITS < prec(a) < 2*GMP_NUMB_BITS and
+ GMP_NUMB_BITS < prec(b), prec(c) <= 2*GMP_NUMB_BITS.
+ It is exported since called from mpfr_sqr too. */
+int
mpfr_mul_2 (mpfr_ptr a, mpfr_srcptr b, mpfr_srcptr c, mpfr_rnd_t rnd_mode,
mpfr_prec_t p)
{
diff --git a/src/sqr.c b/src/sqr.c
index 4096be731..098bec75a 100644
--- a/src/sqr.c
+++ b/src/sqr.c
@@ -53,9 +53,16 @@ mpfr_sqr (mpfr_ptr a, mpfr_srcptr b, mpfr_rnd_t rnd_mode)
( MPFR_ASSERTD(MPFR_IS_ZERO(b)), MPFR_SET_ZERO(a) );
MPFR_RET(0);
}
- ax = 2 * MPFR_GET_EXP (b);
bq = MPFR_PREC(b);
+ if (MPFR_GET_PREC(a) < GMP_NUMB_BITS && bq <= GMP_NUMB_BITS)
+ return mpfr_mul_1 (a, b, b, rnd_mode, MPFR_GET_PREC(a));
+
+ if (GMP_NUMB_BITS < MPFR_GET_PREC(a) && MPFR_GET_PREC(a) < 2 * GMP_NUMB_BITS
+ && GMP_NUMB_BITS < bq && bq <= 2 * GMP_NUMB_BITS)
+ return mpfr_mul_2 (a, b, b, rnd_mode, MPFR_GET_PREC(a));
+
+ ax = 2 * MPFR_GET_EXP (b);
MPFR_ASSERTN (2 * (mpfr_uprec_t) bq <= MPFR_PREC_MAX);
bn = MPFR_LIMB_SIZE (b); /* number of limbs of b */
diff --git a/src/sqrt.c b/src/sqrt.c
index 2ace08ff4..8154dd299 100644
--- a/src/sqrt.c
+++ b/src/sqrt.c
@@ -20,194 +20,11 @@ along with the GNU MPFR Library; see the file COPYING.LESSER. If not, see
http://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc.,
51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */
-/*
-*** Note ***
-
- The code of mpfr_sqrt1 and/or functions it calls depends on
- implementation-defined features of the C standard. See lines with a
- cast to mp_limb_signed_t, associated with a shift to the right '>>'.
- Such features are known to behave as the code below expects with GCC,
- according to the GCC manual (excerpt from the GCC 4.9.3 manual):
-
- 4 C Implementation-defined behavior
- ***********************************
-
- 4.5 Integers
- ============
-
- * 'The result of, or the signal raised by, converting an integer to
- a signed integer type when the value cannot be represented in an
- object of that type (C90 6.2.1.2, C99 and C11 6.3.1.3).'
-
- For conversion to a type of width N, the value is reduced modulo
- 2^N to be within range of the type; no signal is raised.
-
- * 'The results of some bitwise operations on signed integers (C90
- 6.3, C99 and C11 6.5).'
-
- Bitwise operators act on the representation of the value including
- both the sign and value bits, where the sign bit is considered
- immediately above the highest-value value bit. Signed '>>' acts
- on negative numbers by sign extension.
-
- It is not known whether it works with other compilers. Thus this code
- is currently enabled only when __GNUC__ is defined (which includes
- compilers that declare a compatibility with GCC). A configure test
- might be an alternative solution (but without any guarantee, in case
- the result may also depend on the context).
-
- Warning! The right shift of a negative value corresponds to an integer
- division by a power of two, with rounding toward negative.
-
- TODO: Complete the comments when a right shift of a negative value
- may be involved, so that the rounding toward negative appears in the
- proof. There has been at least an error with a proof of a bound!
-*/
-
#define MPFR_NEED_LONGLONG_H
#include "mpfr-impl.h"
-#if !defined(MPFR_GENERIC_ABI) && (GMP_NUMB_BITS == 32 || GMP_NUMB_BITS == 64)
-
-/* The tables T1[] and T2[] below were generated using the Sage code below,
- with T1,T2 = bipartite(4,4,4,16,16). Note: we would get a slightly smaller
- error using an approximation of the form T1[a,b] * (1 + T2[a,b]), but this
- would make the code more complex, and the approximation would not always fit
- on p2 bits (assuming p2 >= p1).
-# bi-partite method, using a table T1 of p1 bits, and T2 of p2 bits
-# approximate sqrt(a:b:c) with T1[a,b] + T2[a,c]
-def bipartite(pa,pb,pc,p1,p2):
- T1 = dict()
- T2 = dict()
- maxerr = maxnum = 0
- for a in range(2^(pa-2),2^pa):
- for b in range(2^pb):
- A1 = (a*2^pb+b)/2^(pa+pb)
- A2 = (a*2^pb+b+1)/2^(pa+pb)
- X = (1/sqrt(A1) + 1/sqrt(A2))/2
- X = round(X*2^p1)/2^p1
- T1[a,b] = X*2^p1
- maxnum = max(maxnum, abs(T1[a,b]))
- # print "a=", a, "b=", b, "T1=", x
- maxerr = max(maxerr, n(abs(1/sqrt(A1) - X)))
- maxerr = max(maxerr, n(abs(1/sqrt(A2) - X)))
- print "maxerr1 =", maxerr, log(maxerr)/log(2.0), "maxnum=", maxnum
- maxerr = maxnum = 0
- for a in range(2^(pa-2),2^pa):
- for c in range(2^pc):
- Xmin = infinity
- Xmax = -infinity
- for b in range(2^pb):
- A = (a*2^(pb+pc)+b*2^pc+c)/2^(pa+pb+pc)
- X = 1/sqrt(A) - T1[a,b]/2^p1
- X = round(X*2^p2)/2^p2
- Xmin = min (Xmin, X)
- Xmax = max (Xmax, X)
- A = (a*2^(pb+pc)+b*2^pc+c+1)/2^(pa+pb+pc)
- X = 1/sqrt(A) - T1[a,b]/2^p1
- X = round(X*2^p2)/2^p2
- Xmin = min (Xmin, X)
- Xmax = max (Xmax, X)
- T2[a,c] = round((Xmin + Xmax)/2*2^p2)
- maxnum = max(maxnum, abs(T2[a,c]))
- # print "a=", a, "c=", c, "T2=", T2[a,c]
- for b in range(2^pb):
- A = (a*2^(pb+pc)+b*2^pc+c)/2^(pa+pb+pc)
- X = 1/sqrt(A)
- maxerr = max(maxerr, n(abs(X - (T1[a,b]/2^p1 + T2[a,c]/2^p2))))
- A = (a*2^(pb+pc)+b*2^pc+c+1)/2^(pa+pb+pc)
- X = 1/sqrt(A)
- maxerr = max(maxerr, n(abs(X - (T1[a,b]/2^p1 + T2[a,c]/2^p2))))
- print "maxerr2 =", maxerr, log(maxerr)/log(2.0), "maxnum=", maxnum
- return [T1[a,b] for a in range(2^(pa-2),2^pa) for b in range(2^pb)], \
- [T2[a,c] for a in range(2^(pa-2),2^pa) for c in range(2^pc)]
-*/
-
-static const mp_limb_t T1[] = {130566, 129565, 128587, 127631, 126696, 125781, 124886, 124009, 123151, 122311, 121487, 120680, 119888, 119112, 118351, 117604, 116871, 116152, 115446, 114753, 114072, 113402, 112745, 112099, 111464, 110839, 110225, 109621, 109027, 108442, 107867, 107301, 106743, 106194, 105654, 105122, 104597, 104081, 103572, 103070, 102576, 102089, 101608, 101134, 100667, 100207, 99752, 99304, 98861, 98425, 97994, 97569, 97149, 96735, 96326, 95922, 95523, 95129, 94740, 94356, 93976, 93601, 93230, 92864, 92502, 92144, 91790, 91441, 91095, 90753, 90415, 90081, 89750, 89423, 89100, 88780, 88463, 88150, 87840, 87534, 87230, 86930, 86633, 86339, 86048, 85759, 85474, 85191, 84912, 84635, 84360, 84088, 83819, 83553, 83289, 83027, 82768, 82512, 82257, 82005, 81756, 81508, 81263, 81020, 80780, 80541, 80304, 80070, 79837, 79607, 79379, 79152, 78928, 78705, 78484, 78265, 78048, 77833, 77619, 77408, 77197, 76989, 76782, 76577, 76374, 76172, 75972, 75773, 75576, 75381, 75187, 74994, 74803, 74613, 74425, 74239, 74053, 73869, 73687, 73505, 73325, 73147, 72969, 72793, 72619, 72445, 72273, 72102, 71932, 71763, 71596, 71429, 71264, 71100, 70937, 70776, 70615, 70455, 70297, 70139, 69983, 69828, 69673, 69520, 69368, 69216, 69066, 68917, 68768, 68621, 68475, 68329, 68184, 68041, 67898, 67756, 67615, 67475, 67336, 67197, 67060, 66923, 66787, 66652, 66518, 66384, 66252, 66120, 65989, 65858, 65729, 65600};
-
-static const mp_limb_signed_t T2[] = {415, 360, 304, 249, 194, 139, 85, 29, -34, -89, -143, -198, -252, -307, -361, -415, 304, 264, 224, 183, 143, 102, 62, 21, -24, -64, -105, -145, -185, -225, -265, -305, 236, 204, 173, 142, 111, 79, 48, 17, -18, -50, -81, -112, -143, -174, -205, -236, 190, 164, 139, 114, 89, 64, 39, 13, -14, -39, -65, -90, -114, -140, -165, -189, 157, 136, 115, 94, 74, 53, 32, 11, -12, -33, -53, -74, -95, -116, -137, -157, 133, 115, 97, 80, 63, 45, 27, 9, -10, -27, -45, -62, -80, -97, -115, -133, 114, 99, 84, 69, 54, 38, 23, 8, -9, -24, -39, -53, -68, -84, -99, -114, 99, 86, 73, 60, 46, 33, 20, 7, -8, -21, -34, -47, -60, -73, -86, -99, 88, 76, 65, 53, 41, 30, 18, 6, -7, -18, -30, -41, -53, -64, -76, -87, 78, 68, 57, 47, 36, 26, 16, 5, -6, -16, -26, -37, -47, -58, -68, -78, 70, 61, 51, 42, 33, 24, 14, 5, -5, -15, -24, -33, -42, -52, -61, -70, 63, 55, 47, 38, 30, 21, 13, 4, -5, -13, -22, -30, -38, -47, -55, -63};
-
-/* For GMP_NUMB_BITS=32: return a (1+20)-bit approximation x0 of 2^36/sqrt(a0).
- For GMP_NUMB_BITS=64: return a (1+40)-bit approximation x0 of 2^72/sqrt(a0).
- Assume a0 >= 2^(GMP_NUMB_BITS-2), and GMP_NUMB_BITS = 32 or 64.
- Must ensure: x0 <= 2^36/sqrt(a0) for GMP_NUMB_BITS=32,
- x0 <= 2^72/sqrt(a0) for GMP_NUMB_BITS=64. */
-static mp_limb_t
-mpn_rsqrtrem1 (mp_limb_t a0)
-{
- mp_limb_t a = a0 >> (GMP_NUMB_BITS - 4);
- mp_limb_t b = (a0 >> (GMP_NUMB_BITS - 8)) & 0xf;
- mp_limb_t c = (a0 >> (GMP_NUMB_BITS - 12)) & 0xf;
- mp_limb_t x0, t;
-
-
- MPFR_STAT_STATIC_ASSERT (GMP_NUMB_BITS == 32 || GMP_NUMB_BITS == 64);
-
- x0 = T1[((a - 4) << 4) + b] + T2[((a - 4) << 4) + c];
- /* now x0 is a 16-bit approximation, with maximal error 2^(-9.48):
- -2^(-9.48) <= x0/2^16 - 1/sqrt(a0/2^64) <= 2^(-9.48)
- The worst case is obtained for floor(a0/2^52) = 1265. */
-
-#if GMP_NUMB_BITS == 32
- x0 >>= 1; /* reduce approximation to 1+15 bits */
- /* In principle, a0>>10 can have up to 22 bits, and (x0^2)>>12 can have up to
- 20 bits, thus the product can have up to 42 bits, but since a0*x0^2 is very
- near 2^62, thus (a0>>10)*(x0^2)>>12 is very near 2^40, and when we reduce
- it mod 2^32 and interpret as a signed number in [-2^31, 2^31-1], we get
- the correct remainder (a0>>10)*(x0^2)>>12 - 2^40 */
- t = (mp_limb_signed_t) ((a0 >> 10) * ((x0 * x0) >> 12)) >> 8;
- /* |t| < 6742843 <= 2^23 - 256 (by exhaustive search) */
- t = (mp_limb_signed_t) t >> 8; /* now |t| < 2^15, thus |x0*t| < 2^31 */
- x0 = (x0 << 5) - ((mp_limb_signed_t) (x0 * t) >> 20);
-
- /* by exhaustive search on all possible values of a0, we get:
- -1.61 <= x0 - 2^36/sqrt(a0) <= 3.11 thus
- -2^(-19.3) < -1.54e-6 <= x0/2^20 - 2^16/sqrt(a0) <= 2.97e-6 < 2^(-18.3)
- */
-
- return x0 - 4; /* ensures x0 <= 2^36/sqrt(a0) */
-#else /* GMP_NUMB_BITS = 64 */
- {
- mp_limb_t a1 = a0 >> (GMP_NUMB_BITS - 32);
- /* a1 has 32 bits, thus a1*x0^2 has 64 bits */
- t = (mp_limb_signed_t) (-a1 * (x0 * x0)) >> 32;
- /* t has 32 bits now */
- }
- x0 = (x0 << 15) + ((mp_limb_signed_t) (x0 * t) >> (17+1));
- /* now x0 is a 31-bit approximation (32 bits, 1 <= x0/2^31 <= 2),
- with maximal error 2^(-19.19):
- -2^(-19.22) <= x0/2^31 - 1/sqrt(a0/2^64) <= 2^(-19.22).
- The worst case is attained for a1 = 1326448625, with x0 = 3864240837. */
-
- {
- mp_limb_t a1 = a0 >> (GMP_NUMB_BITS - 41); /* 2^39 <= a1 < 2^41 */
- t = (x0 * x0) >> 23; /* t < 2^41 */
- /* a1 * t has at most 82 bits, but we know the upper 19 bits cancel with 1 */
- t = (mp_limb_signed_t) (-a1 * t) >> 31;
- /* it remains 49 bits in theory, but t has only 31 bits at most */
- /* the error on t is at most 1 (from the truncation >> 31,
- plus 2^(41-31) from the truncation of a0 into a1 multiplied by t,
- and another 2^(41-31) from the truncation of x0^2 multiplied by a1,
- thus at most 2^11+1 (in fact since t/2^41 is about 2^41/a1, the maximal
- error is when a0 is near 2^64 or 2^62, and is 1.25*2^10 + 1) */
- }
- x0 = (x0 << 9) + ((mp_limb_signed_t) (x0 * t) >> (31+1+49-40));
- /* The error on x0 is at most (1.25*2^10+1)*2^(32-41) from the previous error on t,
- plus 1 from the truncation by >> (31+1+49-40), thus at most 2.5+2^(-9)+1.
- Since the mathematical error is bounded by 2^(-37.85) <= 4.44 ulps [but this
- error can only make x0 smaller], we have at the end:
- -(3.5+2^(-9))/2^40 - 2^(-37.85) <= x0/2^40 - 2^32/sqrt(a0) <= (3.5+2^(-9))/2^40:
-
- -2^(-37.01) < x0/2^40 - 2^32/sqrt(a0) < 2^(-38.19)
- */
- x0 = x0 - 4; /* ensures x0 <= 2^72/sqrt(a0) */
- /* x0-2 fails for example for a0=4967732205162787840 (gives x0=2118754313105) */
- /* now -2^(-36.30) < x0/2^40 - 2^32/sqrt(a0) < 0 */
- return x0;
-#endif
-}
+#if !defined(MPFR_GENERIC_ABI) && GMP_NUMB_BITS == 64
-#if GMP_NUMB_BITS == 64
/* The Taylor coefficient of order 0 of sqrt(i/2^8+x) is
U[i-64][0]/2^64 + U[i-64][1]/2^128, then the Taylor coefficient of order j is
(up to sign) U[i-64][j+1]/2^(64-8*j).
@@ -242,9 +59,9 @@ mpn_sqrtrem2_approx (mp_limb_t n)
/* the truncation error on h is at most 5 */
umul_ppmm (h, l, u[3] - h, x);
/* the truncation error on h is at most 6 */
- umul_ppmm (h, l, u[2] - h, x >> 8); /* here we shift by 8 since u[0] has the
- same weight 1/2^64 as u[2], the truncation
- error on h + l/2^64 is at most 6/2^8 */
+ umul_ppmm (h, l, u[2] - h, x >> 8); /* here we shift by 8 since u[0] has weight
+ 1/2^64 and u[2] has weight 1/2^72, the
+ truncation error on h+l/2^64 is <= 6/2^8 */
add_ssaaaa (h, l, h, l, u[0], u[1]);
/* Since the above addition is exact, the truncation error on h + l/2^64
is still at most 6/2^8. Together with the mathematical error < .927e-21*2^64,
@@ -270,215 +87,82 @@ mpn_sqrtrem2_approx (mp_limb_t n)
/* Put in rp[1]*2^64+rp[0] an approximation of sqrt(2^128*n),
with 2^126 <= n := np[1]*2^64 + np[0] < 2^128.
- We use a Taylor polynomial of degree 14.
- The coefficients of degree 0 to 9 are represented by two 64-bit limbs
- (most significant first), the remaining coefficients by one 64-bit limb,
- thus the degree-0 coefficient is u[0]/2^64 + u[1]/2^128,
- the degree-1 coefficient is u[2]/2^64 + u[3]/2^128,
- ...,
- the degree-9 coefficient is u[18]/2^64 + u[19]/2^128,
- the degree-10 coefficient is u[20]/2^64,
- ...,
- the degree-14 coefficient is u[24]/2^64. */
+ The error on {rp, 2} is less than 43 ulps (in unknown direction).
+*/
static void
mpn_sqrtrem4_approx (mpfr_limb_ptr rp, mpfr_limb_srcptr np)
{
int i = np[1] >> 56;
- mp_limb_t xh, xl, h, l, yh, yl;
+ mp_limb_t x, r1, r0, h, l, t;
const mp_limb_t *u;
- xh = (np[1] << 8) | (np[0] >> 56);
- xl = np[0] << 8;
+ x = np[1] << 8 | (np[0] >> 56);
u = V[i - 64];
- umul_ppmm (h, l, u[24], xh);
- umul_ppmm (h, l, u[23] - h, xh);
- umul_ppmm (h, l, u[22] - h, xh);
- umul_ppmm (h, l, u[21] - h, xh);
- umul_ppmm (h, l, u[20] - h, xh);
- /* now we have to deal with two limbs */
- sub_ddmmss (yh, yl, u[18], u[19], 0, h);
- umul_ppmm2 (h, l, yh, yl, xh, xl);
- sub_ddmmss (yh, yl, u[16], u[17], h, l);
- umul_ppmm2 (h, l, yh, yl, xh, xl);
- sub_ddmmss (yh, yl, u[14], u[15], h, l);
- umul_ppmm2 (h, l, yh, yl, xh, xl);
- sub_ddmmss (yh, yl, u[12], u[13], h, l);
- umul_ppmm2 (h, l, yh, yl, xh, xl);
- sub_ddmmss (yh, yl, u[10], u[11], h, l);
- umul_ppmm2 (h, l, yh, yl, xh, xl);
- sub_ddmmss (yh, yl, u[8], u[9], h, l);
- umul_ppmm2 (h, l, yh, yl, xh, xl);
- sub_ddmmss (yh, yl, u[6], u[7], h, l);
- umul_ppmm2 (h, l, yh, yl, xh, xl);
- sub_ddmmss (yh, yl, u[4], u[5], h, l);
- umul_ppmm2 (h, l, yh, yl, xh, xl);
- sub_ddmmss (yh, yl, u[2], u[3], h, l);
- umul_ppmm2 (h, l, yh, yl, xh, xl);
- add_ssaaaa (rp[1], rp[0], u[0], u[1], h, l);
-}
-#endif /* GMP_NUMB_BITS == 64 */
-
-#if GMP_NUMB_BITS == 32
-/* Given as input np[0] and np[1], with B/4 <= np[1] (where B = 2^GMP_NUMB_BITS),
- mpn_sqrtrem2 returns a value x, 0 <= x <= 1, and stores values s in sp[0] and
- r in rp[0] such that:
-
- n := np[1]*B + np[0] = s^2 + x*B + r, with n < (s+1)^2
-
- or equivalently x*B + r <= 2*s.
-
- This comment is for GMP_NUMB_BITS=64 for simplicity, but the code is valid
- for any even value of GMP_NUMB_BITS.
- The algorithm used is the following, and uses Karp-Markstein's trick:
- - start from x, a 41-bit approximation of 2^72/sqrt(n1), with x <= 2^72/sqrt(n1)
- - y = floor(n1*x/2^72), which is a 32-bit approximation of sqrt(n1)
- - t = n1 - y^2
- - u = (x * t) >> 33
- - y = (y << 32) + u
-
- Proof:
- * we know that Newton's iteration for the reciprocal square root,
-
- x' = x + (x/2) (1 - a*x^2), (1)
-
- if evaluated with infinite precision, always produces x' <= 1/sqrt(a).
- See for example Lemma 3.14 in "Modern Computer Arithmetic" by Brent and
- Zimmermann.
-
- * if we multiply both sides of equation (1) by a, and write y0 = a*x
- and y0' = a*x', we get:
-
- y0' = y0 + (x/2)*(a - y0^2) (2)
-
- and since x' <= 1/sqrt(a), y0' <= sqrt(a).
-
- * now assume we replace y0 in (2) by y = y0 - e for some e >= 0.
- Equation (2) becomes:
-
- y' = y0 + (x/2)*(a - y0^2) - e*(1-x*y0+x*e/2) (3)
-
- Since y0 = a*x, the term 1-x*y0+x*e/2 equals 1-a*x^2+x*e/2,
- which is non-negative since x <= 1/sqrt(a). Thus y' <= y0' <= sqrt(a).
-
- In practice, we should ensure y <= n1*x/2^64, so that t and u are
- non-negative, so that all right shifts round towards -infinity.
-*/
-static mp_limb_t
-mpn_sqrtrem2 (mpfr_limb_ptr sp, mpfr_limb_ptr rp, mpfr_limb_srcptr np)
-{
- mp_limb_t x, y, t, high, low;
-
- x = mpn_rsqrtrem1 (np[1]);
- /* we must have x^2*n1 <= 2^72 for GMP_NUMB_BITS=32
- <= 2^144 for GMP_NUMB_BITS=64 */
-
-#if GMP_NUMB_BITS == 32
- MPFR_ASSERTD ((double) x * (double) x * (double) np[1]
- < 4722366482869645213696.0);
- /* x is an approximation of 2^36/sqrt(n1), x has 1+20 bits */
-
- /* We know x/2^20 <= 2^16/sqrt(n1) + 2^(-18)
- thus n1*x/2^36 <= sqrt(n1) + 2^(-18)*n1/2^16 <= sqrt(n1) + 2^(-2). */
-
- /* compute y = floor(np[1]*x/2^36), cutting the upper 24 bits of n1 in two
- parts of 12 and 11 bits, which can be multiplied by x without overflow
- (warning: if we take 12 bits from low, it might overflow with x */
- high = np[1] >> 20; /* upper 12 bits from n1 */
- MPFR_ASSERTD((double) high * (double) x < 4294967296.0);
- low = (np[1] >> 9) & 0x7ff; /* next 11 bits */
- MPFR_ASSERTD((double) low * (double) x < 4294967296.0);
- y = high * x + ((low * x) >> 11); /* y approximates n1*x/2^20 */
- y = (y - 0x4000) >> 16; /* the constant 0x4000 = 2^(36-2-20) takes
- into account the 2^(-2) error above, to ensure
- y <= sqrt(n1) */
-#else /* GMP_NUMB_BITS = 64 */
- MPFR_ASSERTD ((double) x * (double) x * (double) np[1]
- < 2.2300745198530623e43);
- /* x is an approximation of 2^72/sqrt(n1), x < 2^41 */
-
- /* We know 2^32/sqrt(n1) - 2^(-36.30) <= x/2^40 <= 2^32/sqrt(n1) */
-
- /* compute y = floor(np[1]*x/2^72): we cut the upper 48 bits of n1 in two parts of
- 24 and 23 bits, which can be multiplied by x without overflow (warning: if we
- take 24 bits from low, it might overflow with x). We could simply write
- umul_ppmm (high, low, np[1], x) followed by y = high >> 8 but the following
- code is faster. */
- high = np[1] >> 40; /* upper 24 bits from n1 */
- MPFR_ASSERTD((double) high * (double) x < 18446744073709551616.0);
- low = (np[1] >> 17) & 0x7fffff; /* next 23 bits */
- MPFR_ASSERTD((double) low * (double) x < 18446744073709551616.0);
- y = high * x + ((low * x) >> 23); /* y approximates n1*x/2^40 */
- y = y >> 32;
-#endif
-
- /* Now y is an approximation of sqrt(n1), with y <= sqrt(n1). The errors are:
- (a) mathematical error: according to Lemma 3.14 from "Modern Computer
- Arithmetic", it is bounded by 3/2*x^3/theta^4*2^(-2*36.30), where
- x <= theta + 2^(-36.30), thus x/theta <= 1 + 2^(-36.30), thus the
- mathematical error is bounded by 2^(-72.01), thus 2^(-40.01) for a
- value normalized by 2^32;
- (b) truncation error in Newton's floor(np[1]*x/2^72): it is bounded by
- 2^17*x/2^72 for the neglected part of np[1], and 1 in (low * x) >> 23.
- Thus we have:
- sqrt(np[1]) - 1 - 2^(-13.99) < y <= sqrt(np[1]) */
-
- t = np[1] - y * y;
- MPFR_ASSERTD((mp_limb_signed_t) t >= 0);
-
-#if GMP_NUMB_BITS == 32
- /* we now compute t = (x * t) >> (20 + 1), but x * t might have
- more than 32 bits thus we cut t in two parts of 12 and 11 bits */
- high = t >> 11;
- low = t & 0x7ff;
- MPFR_ASSERTD((double) high * (double) x < 4294967296.0);
- MPFR_ASSERTD((double) low * (double) x < 4294967296.0);
- t = high * x + ((low * x) >> 11); /* approximates t*x/2^11 */
-
- y = (y << (GMP_NUMB_BITS / 2)) + (t >> 10);
-#else
- /* we now compute t = (x * t) >> (40 + 1), but x * t might have
- more than 64 bits thus we cut t in two parts of 24 and 23 bits */
- high = t >> 23;
- low = t & 0x7fffff;
- MPFR_ASSERTD((double) high * (double) x < 18446744073709551616.0);
- MPFR_ASSERTD((double) low * (double) x < 18446744073709551616.0);
- t = high * x + ((low * x) >> 23); /* approximates t*x/2^23 */
-
- y = (y << (GMP_NUMB_BITS / 2)) + (t >> 18);
-#endif
-
- /* the correction code below assumes y >= 2^(GMP_NUMB_BITS - 1) */
- if (MPFR_UNLIKELY(y < MPFR_LIMB_HIGHBIT))
- y = MPFR_LIMB_HIGHBIT;
-
- umul_ppmm (x, t, y, y);
- MPFR_ASSERTD(x < np[1] || (x == np[1] && t <= np[0])); /* y should not be too large */
- sub_ddmmss (x, t, np[1], np[0], x, t);
-
- /* Remainder x*2^GMP_NUMB_BITS+t should be <= 2*y (which implies x <= 1).
- If x = 1, it suffices to check t > 2*y mod 2^GMP_NUMB_BITS. */
- while (x > 1 || (x == 1 && t > 2 * y))
+ umul_ppmm (h, l, u[8], x);
+ /* the truncation error on h is at most 1 here */
+ umul_ppmm (h, l, u[7] - h, x);
+ /* the truncation error on h is at most 2 */
+ umul_ppmm (h, l, u[6] - h, x);
+ /* the truncation error on h is at most 3 */
+ umul_ppmm (h, l, u[5] - h, x);
+ /* the truncation error on h is at most 4 */
+ umul_ppmm (h, l, u[4] - h, x);
+ /* the truncation error on h is at most 5 */
+ umul_ppmm (h, l, u[3] - h, x);
+ /* the truncation error on h is at most 6 */
+ umul_ppmm (h, l, u[2] - h, x >> 6); /* here we shift by 6 since u[0] has weight
+ 1/2^64 and u[2] has weight 1/2^70, the
+ truncation error on h+l/2^64 is <= 6/2^6 */
+ sub_ddmmss (h, l, u[0], u[1], h, l);
+ /* Since the mathematical error is < 0.412e-19*2^64, the total error on
+ h + l/2^64 is less than 0.854 */
+ const mp_limb_t magic = 0xda9fbe76c8b43800UL; /* ceil(0.854*2^64) */
+ x = h - (l < magic && h != 0);
+
+ /* now 2^64 + x is an approximation of 2^96/sqrt(np[1]),
+ with 2^64 + x < 2^96/sqrt(np[1]) */
+
+ umul_ppmm (r1, l, np[1], x);
+ r1 += np[1];
+
+ /* now r1 is an approximation of sqrt(2^64*np[1]), with r1 < sqrt(2^64*np[1]) */
+
+ /* make sure r1 >= 2^63 */
+ if (r1 < MPFR_LIMB_HIGHBIT)
+ r1 = MPFR_LIMB_HIGHBIT;
+
+ umul_ppmm (h, l, r1, r1);
+ sub_ddmmss (h, l, np[1], np[0], h, l);
+ l = (h << 63) | (l >> 1);
+ h = h >> 1;
+
+ /* now add (2^64+x) * (h*2^64+l) / 2^64 to r0 */
+
+ umul_ppmm (r0, t, x, l); /* x * l */
+ r0 += l;
+ r1 += h + (r0 < l); /* now we have added 2^64 * (h*2^64+l) */
+ while (h--)
{
- /* (y+1)^2 = y^2 + 2*y + 1 */
- x -= 1 + (t < (2 * y + 1));
- t -= 2 * y + 1;
- y ++;
- /* GMP_NUMB_BITS=32: average number of loops observed is 0.982,
- max is 3 (for n1=1277869843, n0=3530774227);
- GMP_NUMB_BITS=64: average number of loops observed is 0.593,
- max is 3 (for n1=4651405965214438987, n0=18443926066120424952).
- */
+ r0 += x;
+ r1 += (r0 < x); /* add x */
}
- sp[0] = y;
- rp[0] = t;
- return x;
+ if (r1 & MPFR_LIMB_HIGHBIT)
+ {
+ rp[0] = r0;
+ rp[1] = r1;
+ }
+ else /* overflow occurred in r1 */
+ {
+ rp[0] = ~MPFR_LIMB_ZERO;
+ rp[1] = ~MPFR_LIMB_ZERO;
+ }
}
-#endif
/* Special code for prec(r), prec(u) < GMP_NUMB_BITS. We cannot have
prec(u) = GMP_NUMB_BITS here, since when the exponent of u is odd,
- we need to shift u by one bit to the right without losing any bit. */
+ we need to shift u by one bit to the right without losing any bit.
+ Assumes GMP_NUMB_BITS = 64. */
static int
mpfr_sqrt1 (mpfr_ptr r, mpfr_srcptr u, mpfr_rnd_t rnd_mode)
{
@@ -487,6 +171,8 @@ mpfr_sqrt1 (mpfr_ptr r, mpfr_srcptr u, mpfr_rnd_t rnd_mode)
mp_limb_t u0, r0, rb, sb, mask = MPFR_LIMB_MASK(sh);
mpfr_limb_ptr rp = MPFR_MANT(r);
+ MPFR_STAT_STATIC_ASSERT (GMP_NUMB_BITS == 64);
+
/* first make the exponent even */
u0 = MPFR_MANT(u)[0];
if (((unsigned int) exp_u & 1) != 0)
@@ -498,7 +184,6 @@ mpfr_sqrt1 (mpfr_ptr r, mpfr_srcptr u, mpfr_rnd_t rnd_mode)
exp_r = exp_u / 2;
/* then compute the integer square root of u0*2^GMP_NUMB_BITS */
-#if GMP_NUMB_BITS == 64
r0 = mpn_sqrtrem2_approx (u0);
sb = 1; /* when we can round correctly with the approximation, the sticky bit
is non-zero */
@@ -526,15 +211,6 @@ mpfr_sqrt1 (mpfr_ptr r, mpfr_srcptr u, mpfr_rnd_t rnd_mode)
MPFR_ASSERTN(rb == 0 || (rb == 1 && sb <= 2 * r0));
sb = rb | sb;
}
-#else /* 32-bit variant. FIXME: write mpn_sqrtrem2_approx for GMP_NUMB_BITS=32,
- then use the above code and get rid of mpn_sqrtrem2 */
- {
- mp_limb_t sp[2];
- sp[1] = u0;
- sp[0] = 0;
- sb |= mpn_sqrtrem2 (&r0, &sb, sp);
- }
-#endif
rb = r0 & (MPFR_LIMB_ONE << (sh - 1));
sb |= (r0 & mask) ^ rb;
@@ -605,185 +281,19 @@ mpfr_sqrt1 (mpfr_ptr r, mpfr_srcptr u, mpfr_rnd_t rnd_mode)
}
}
-#if GMP_NUMB_BITS == 64
-/* For GMP_NUMB_BITS=64: return a (1+80)-bit approximation x = xp[1]*B+xp[0]
- of 2^144/sqrt(ap[1]*B+ap[0]).
- Assume ap[1] >= B/4, thus sqrt(ap[1]*B+ap[0]) >= B/2, thus x <= 2^81. */
-static void
-mpn_rsqrtrem2 (mpfr_limb_ptr xp, mpfr_limb_srcptr ap)
-{
- mp_limb_t t1, t0, u1, u0, r0, r1, r2;
-
- MPFR_STAT_STATIC_ASSERT (GMP_NUMB_BITS == 64);
-
- xp[1] = mpn_rsqrtrem1 (ap[1]);
-
- /* now we should compute x + (x/2) * (1 - a*x^2), where the upper ~40 bits of
- a*x^2 should cancel with 1, thus we only need the following 40 bits */
-
- /* xp[1] has 1+40 bits, with xp[1] <= 2^72/sqrt(ap[1]) */
- umul_ppmm (t1, t0, xp[1], xp[1]);
-
- /* now t1 has at most 18 bits, with least 16 bits being its fractional value */
-
- u1 = ap[1] >> 48;
- u0 = (ap[1] << 16) | (ap[0] >> 48);
-
- /* u1 has the 16 most significant bits of a, and u0 the next 64 bits */
-
- /* we want t1*u1 << 48 + (t1*u0+t0*u1) >> 16 + t0*u0 >> 80
- [32 bits] [64 bits] [48 bits]
- but since we know the upper ~40 bits cancel with 1, we can ignore t1*u1. */
- umul_ppmm (r2, r1, t0, u0);
- r0 = t1 * u0; /* we ignore the upper 16 bits of the product */
- r1 = t0 * u1; /* we ignore the upper 16 bits of the product */
- r0 = r0 + r1 + r2;
-
- /* the upper ~8 bits of r0 should cancel with 1, we are interested in the next
- 40 bits */
-
- umul_ppmm (t1, t0, xp[1], -r0);
-
- /* we should now add t1 >> 33 at xp[1] */
- xp[1] += t1 >> 33;
- xp[0] = t1 << 31;
- /* shift by 24 bits to the right, since xp[1] has 24 leading zeros,
- and we now expect 48 */
- xp[0] = (xp[1] << 40) | (xp[0] >> 24);
- xp[1] = xp[1] >> 24;
-}
-
-/* Given as input ap[0-3], with B/4 <= ap[3] (where B = 2^GMP_NUMB_BITS),
- mpn_sqrtrem4 returns a value x, 0 <= x <= 1, and stores values s in sp[0-1] and
- r in rp[0-1] such that:
-
- n := ap[3]*B^3 + ap[2]*B^2 + ap[1]*B + ap[0] = s^2 + x*B + r, with n < (s+1)^2
-
- or equivalently x*B + r <= 2*s.
-
- This code currently assumes GMP_NUMB_BITS = 64, and takes on average
- 135.68 cycles on an Intel i5-6500 for precision 113 bits */
-static mp_limb_t
-mpn_sqrtrem4 (mpfr_limb_ptr sp, mpfr_limb_ptr rp, mpfr_limb_srcptr ap)
-{
- mp_limb_t x[2], t1, t0, r2, r1, h, l, u2, u1, b[4];
-
- MPFR_STAT_STATIC_ASSERT(GMP_NUMB_BITS == 64);
-
- mpn_rsqrtrem2 (x, ap + 2);
-
- /* x[1]*B+x[0] is a 80-bit approximation of 2^144/sqrt(ap[3]*B+ap[2]),
- and should be smaller */
-
- /* first compute y0 = a*x with at least 80 bits of precision */
-
- t1 = ap[3] >> 48;
- t0 = (ap[3] << 16) | (ap[2] >> 48);
-
- /* now t1:t0 is a (16+64)-bit approximation of a,
- (x1*B+x0) * (t1*B+t0) = (x1*t1)*B^2 + (x1*t0+x0*t1)*B + x0*t0 */
- r2 = x[1] * t1; /* r2 has 32 bits */
- umul_ppmm (h, r1, x[1], t0);
- r2 += h;
- umul_ppmm (h, l, x[0], t1);
- r1 += l;
- r2 += h + (r1 < l);
- umul_ppmm (h, l, x[0], t0);
- r1 += h;
- r2 += (r1 < h);
-
- /* r2 has 32 bits, r1 has 64 bits, thus we have 96 bits in total, we put 64
- bits in r2 and 16 bits in r1 */
- r2 = (r2 << 32) | (r1 >> 32);
- r1 = (r1 << 32) >> 48;
-
- /* we consider y0 = r2*2^16 + r1, which has 80 bits, and should be smaller than
- 2^16*sqrt(ap[3]*B+ap[2]) */
-
- /* Now compute y0 + (x/2)*(a - y0^2), which should give ~160 correct bits.
- Since a - y0^2 has its ~80 most significant bits that cancel, it remains
- only ~48 bits. */
-
- /* now r2:r1 represents y0, with r2 of 64 bits and r1 of 16 bits,
- and we compute y0^2, whose upper ~80 bits should cancel with a:
- y0^2 = r2^2*2^32 + 2*r2*r1*2^16 + r1^2. */
- t1 = r2 * r2; /* we can simply ignore the upper 64 bits of r2^2 */
- umul_ppmm (h, l, r2, r1);
- t0 = l << 49; /* takes into account the factor 2 in 2*r2*r1 */
- u1 = (r1 * r1) << 32; /* temporary variable */
- t0 += u1;
- t1 += ((h << 49) | (l >> 15)) + (t0 < u1); /* takes into account the factor 2 */
-
- /* now t1:t0 >> 32 equals y0^2 mod 2^96, since y0 has 160 bits, we should shift
- t1:t0 by 64 bits to the right */
- t0 = ap[2] - t1 - (t0 != 0); /* we round downwards to get a lower approximation
- of sqrt(a) at the end */
-
- /* now t0 equals ap[3]*B+ap[2] - ceil(y0^2/2^32) */
-
- umul_ppmm (u2, u1, x[1], t0);
- umul_ppmm (h, l, x[0], t0);
- u1 += h;
- u2 += (u1 < h);
-
- /* divide by 2 to take into account the factor 1/2 in (x/2)*(a - y0^2) */
- u1 = (u2 << 63) | (u1 >> 1);
- u2 = u2 >> 1;
-
- /* u2:u1 approximates (x/2)*(ap[3]*B+ap[2] - y0^2/2^32) / 2^64,
- and should be smaller */
-
- r1 <<= 48; /* put back the most significant bits of r1 in place */
-
- /* add u2:u1 >> 16 to y0 */
- sp[0] = r1 + ((u2 << 48) | (u1 >> 16));
- sp[1] = r2 + (u2 >> 16) + (sp[0] < r1);
-
- mpn_mul_n (b, sp, sp, 2);
- b[2] = ap[2] - b[2] - mpn_sub_n (rp, ap, b, 2);
-
- /* invariant: the remainder {ap, 4} - {sp, 2}^2 is b[2]*B^2 + {rp, 2} */
-
- t0 = mpn_lshift (b, sp, 2, 1);
-
- /* Warning: the initial {sp, 2} might be < 2^127, thus t0 might be 0. */
-
- /* invariant: 2*{sp,2} = t0*B + {b, 2} */
-
- /* While the remainder is greater than 2*s we should subtract 2*s+1 to the
- remainder, and add 1 to the square root. This loop seems to be executed
- at most twice. */
- while (b[2] > t0 || (b[2] == t0 &&
- (rp[1] > b[1] || (rp[1] == b[1] && rp[0] > b[0]))))
- {
- /* subtract 2*s to b[2]*B^2 + {rp, 2} */
- b[2] -= t0 + mpn_sub_n (rp, rp, b, 2);
- /* subtract 1 to b[2]*B^2 + {rp, 2}: b[2] -= mpn_sub_1 (rp, rp, 2, 1) */
- if (rp[0]-- == 0)
- b[2] -= (rp[1]-- == 0);
- /* add 1 to s */
- mpn_add_1 (sp, sp, 2, 1);
- /* add 2 to t0*B + {b, 2}: t0 += mpn_add_1 (b, b, 2, 2) */
- b[0] += 2;
- if (b[0] == 0)
- t0 += (++b[1] == 0);
- }
-
- return b[2];
-}
-
/* Special code for GMP_NUMB_BITS < prec(r) < 2*GMP_NUMB_BITS,
and GMP_NUMB_BITS < prec(u) <= 2*GMP_NUMB_BITS.
- This code should work for any value of GMP_NUMB_BITS, but since mpn_sqrtrem4
- currently assumes GMP_NUMB_BITS=64, it only works for GMP_NUMB_BITS=64. */
+ Assumes GMP_NUMB_BITS=64. */
static int
mpfr_sqrt2 (mpfr_ptr r, mpfr_srcptr u, mpfr_rnd_t rnd_mode)
{
mpfr_prec_t p = MPFR_GET_PREC(r);
mpfr_limb_ptr up = MPFR_MANT(u), rp = MPFR_MANT(r);
- mp_limb_t np[4], tp[2], rb, sb, mask;
+ mp_limb_t np[4], rb, sb, mask;
mpfr_prec_t exp_u = MPFR_EXP(u), exp_r, sh = 2 * GMP_NUMB_BITS - p;
+ MPFR_STAT_STATIC_ASSERT (GMP_NUMB_BITS == 64);
+
if (((unsigned int) exp_u & 1) != 0)
{
np[3] = up[1] >> 1;
@@ -797,20 +307,48 @@ mpfr_sqrt2 (mpfr_ptr r, mpfr_srcptr u, mpfr_rnd_t rnd_mode)
np[2] = up[0];
np[1] = 0;
}
- MPFR_ASSERTD (((unsigned int) exp_u & 1) == 0);
exp_r = exp_u / 2;
-#if 1
- np[0] = 0;
- sb = mpn_sqrtrem4 (rp, tp, np);
- sb |= tp[0] | tp[1];
- rb = rp[0] & (MPFR_LIMB_ONE << (sh - 1));
mask = MPFR_LIMB_MASK(sh);
+
+ mpn_sqrtrem4_approx (rp, np + 2);
+ /* the error is less than 43 ulps on rp[0] */
+ if (((rp[0] + 42) & (mask >> 1)) > 84)
+ sb = 1;
+ else
+ {
+ mp_limb_t tp[4], cy;
+
+ np[0] = 0;
+ mpn_mul_n (tp, rp, rp, 2);
+ while (mpn_cmp (tp, np, 4) > 0) /* approximation is too large */
+ {
+ mpn_sub_1 (rp, rp, 2, 1);
+ /* subtract 2*{rp,2}+1 to {tp,4} */
+ cy = mpn_submul_1 (tp, rp, 2, 2);
+ mpn_sub_1 (tp + 2, tp + 2, 2, cy);
+ mpn_sub_1 (tp, tp, 4, 1);
+ }
+ /* now {tp, 4} <= {np, 4} */
+ mpn_sub_n (tp, np, tp, 4);
+ /* now we want {tp, 4} <= 2 * {rp, 2}, which implies tp[2] <= 1 */
+ MPFR_ASSERTD(tp[3] == 0);
+ while (tp[2] > 1 ||
+ (tp[2] == 1 && tp[1] > ((rp[1] << 1) | (rp[0] >> 63))) ||
+ (tp[2] == 1 && tp[1] == ((rp[1] << 1) | (rp[0] >> 63)) &&
+ tp[0] > (rp[0] << 1)))
+ {
+ /* subtract 2*{rp,2}+1 to {tp,3} (we know tp[3] = 0) */
+ tp[2] -= mpn_submul_1 (tp, rp, 2, 2);
+ mpn_sub_1 (tp, tp, 3, 1);
+ mpn_add_1 (rp, rp, 2, 1);
+ }
+ sb = tp[2] | tp[0] | tp[1];
+ }
+
+ rb = rp[0] & (MPFR_LIMB_ONE << (sh - 1));
sb |= (rp[0] & mask) ^ rb;
rp[0] = rp[0] & ~mask;
-#else
- mpn_sqrtrem4_approx (rp, np);
-#endif
/* rounding */
if (MPFR_UNLIKELY (exp_r > __gmpfr_emax))
@@ -877,9 +415,7 @@ mpfr_sqrt2 (mpfr_ptr r, mpfr_srcptr u, mpfr_rnd_t rnd_mode)
MPFR_RET(1);
}
}
-#endif /* GMP_NUMB_BITS == 64 */
-
-#endif /* !defined(MPFR_GENERIC_ABI) && (GMP_NUMB_BITS == 32 || GMP_NUMB_BITS == 64) */
+#endif /* !defined(MPFR_GENERIC_ABI) && GMP_NUMB_BITS == 64 */
int
mpfr_sqrt (mpfr_ptr r, mpfr_srcptr u, mpfr_rnd_t rnd_mode)
@@ -943,13 +479,10 @@ mpfr_sqrt (mpfr_ptr r, mpfr_srcptr u, mpfr_rnd_t rnd_mode)
MPFR_SET_POS(r);
/* See the note at the beginning of this file about __GNUC__. */
-#if !defined(MPFR_GENERIC_ABI) && defined(__GNUC__) && \
- (GMP_NUMB_BITS == 32 || GMP_NUMB_BITS == 64)
+#if !defined(MPFR_GENERIC_ABI) && GMP_NUMB_BITS == 64
if (MPFR_GET_PREC (r) < GMP_NUMB_BITS && MPFR_GET_PREC (u) < GMP_NUMB_BITS)
return mpfr_sqrt1 (r, u, rnd_mode);
-#endif
-#if !defined(MPFR_GENERIC_ABI) && GMP_NUMB_BITS == 64
if (GMP_NUMB_BITS < MPFR_GET_PREC (r) && MPFR_GET_PREC (r) < 2*GMP_NUMB_BITS
&& MPFR_LIMB_SIZE(u) == 2)
return mpfr_sqrt2 (r, u, rnd_mode);
diff --git a/src/sqrt_tab.h b/src/sqrt_tab.h
index 6cf027055..beba183b7 100644
--- a/src/sqrt_tab.h
+++ b/src/sqrt_tab.h
@@ -20,6 +20,7 @@ along with the GNU MPFR Library; see the file COPYING.LESSER. If not, see
http://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc.,
51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */
+/* the following table is for mpn_sqrtrem2_approx */
static const mp_limb_t U[192][9] = {
/*64*/ {9223372036854775808UL,216172782113783808UL,18446744073709551211UL,72057594037919409UL,562949953352959UL,5497557869691UL,60128965900UL,703958331UL,8224883UL},
/*65*/ {9295150333696574040UL,9655717601082343424UL,18304296041740945442UL,70401138622072963UL,541547220108952UL,5207184569501UL,56076861514UL,646436672UL,7442144UL},
@@ -216,197 +217,197 @@ static const mp_limb_t U[192][9] = {
};
/* the following table is for mpn_sqrtrem4_approx */
-static const mp_limb_t V[192][25] = {
-/*64*/ {9223372036854775808UL,1UL,72057594037927935UL,18446744073709551103UL,281474976710655UL,18446744073709513258UL,2199023255551UL,18446744073708420215UL,21474836479UL,18446744073692077217UL,234881023UL,18446744073547044945UL,2752511UL,18446744072723368698UL,33791UL,18446744069606842859UL,428UL,18446744061652873832UL,5UL,10808639080257074370UL,1368531298102989537UL,18467355284921015UL,252452092435139UL,3473825080059UL,43840374765UL},
-/*65*/ {9295150333696574040UL,9458326124125302122UL,71501156413050569UL,10005618548336875860UL,275004447742502UL,3514984916000372795UL,2115418828788UL,8824716288352884128UL,20340565661UL,7889244764712694208UL,219052245UL,10784072660087824819UL,2527525UL,16797450288835695670UL,30552UL,9426418135974882399UL,381UL,16719899883434876553UL,4UL,16532631274260000784UL,1181102529859048277UL,15692937483194843UL,211226058287873UL,2862197357143UL,35618047960UL},
-/*66*/ {9366378580956700130UL,497841112589747147UL,70957413492096213UL,1960244379882753229UL,268778081409455UL,6505710012253274813UL,2036197586435UL,4940467822666603783UL,19282174113UL,17899599546918546651UL,204507907UL,4969227929339347615UL,2323953UL,9070218443673058456UL,27666UL,2084415653409670841UL,340UL,10821198137222165005UL,4UL,5540222971740967432UL,1021638147762529586UL,13368516612456454UL,177214036346802UL,2365231680439UL,29029050710UL},
-/*67*/ {9437069233485010492UL,11580737367997358151UL,70425889802126943UL,17982518410076410691UL,262783170903458UL,13764494735366686066UL,1961068439578UL,928693725205564225UL,18293548876UL,12191774012526806229UL,191126630UL,1008415266253956997UL,2139477UL,3728169498666643994UL,25089UL,15088239956171525593UL,304UL,4811866855040326489UL,3UL,14468499920810387993UL,885633149145958028UL,11415873953324167UL,149071731123549UL,1960161144626UL,23731304361UL},
-/*68*/ {9507234283080136621UL,7239691060711272113UL,69906134434412769UL,5071832513146798917UL,257007847185341UL,1171567947669870650UL,1889763582245UL,2857008775702251295UL,17369150572UL,1959098264845562898UL,178800079UL,7724395595207815645UL,1972059UL,12902969913988497715UL,22786UL,7454154604217825213UL,272UL,4870299479029626572UL,3UL,6208599723312366913UL,769360383294037689UL,9771270956313800UL,125720198537938UL,1628984855653UL,19457965684UL},
-/*69*/ {9576885282238646259UL,14892033443755400406UL,69397719436511929UL,7727220620617389989UL,251441012451130UL,3302962609537615341UL,1822036322109UL,11787075660115400712UL,16503952193UL,407529121305613589UL,167431399UL,1100245233091749818UL,1819906UL,9435839311595429927UL,20723UL,10572060024308967019UL,244UL,508797001380621895UL,2UL,17472627194102320215UL,669727494854789722UL,8382609405995363UL,106290616600718UL,1357420212434UL,16000110967UL},
-/*70*/ {9646033366360708950UL,12341196150107550567UL,68900238331147921UL,1405775977765736050UL,246072279754099UL,13247147624262080908UL,1757659141100UL,13139105792296172147UL,15693385188UL,7364248616383732798UL,156933851UL,16306777270983566949UL,1681434UL,2348796022033977839UL,18873UL,4430994763660334295UL,219UL,1187882383315513513UL,2UL,11213950351883727968UL,584161742658916298UL,7207178913428601UL,90081128929856UL,1134096209640UL,13193577802UL},
-/*71*/ {9714689274533129758UL,15665938063020445587UL,68413304750233308UL,2968269772426975808UL,240891918134624UL,5986157480822898872UL,1696421958694UL,9915061317483892798UL,14933291889UL,16910191437969615063UL,147229638UL,6480183309790632934UL,1555242UL,12149770942171227483UL,17210UL,17245015609066222284UL,196UL,17637313675195771051UL,2UL,5749694383556965296UL,510516965364486831UL,6209864150291768UL,76522999118861UL,949929919395UL,10908925958UL},
-/*72*/ {9782863368999586659UL,4836346233993301752UL,67936551173608240UL,12715722288411381237UL,235890802686139UL,13366800311180541981UL,1638130574209UL,5601227746393481791UL,14219883456UL,12506579137852669460UL,138248866UL,17338552877050484273UL,1440092UL,6713831785060858935UL,15715UL,5416965692859666466UL,177UL,6322133232891599432UL,2UL,969889559513375692UL,446998202011183167UL,5361713247938772UL,65153973241679UL,797642751399UL,9043748007UL},
-/*73*/ {9850565653418023827UL,7527659077098538722UL,67469627763137149UL,9274931345602025996UL,231060369051839UL,10202742216482322436UL,1582605267478UL,6513607465586606955UL,13549702632UL,9595008129429252986UL,129928655UL,7015853332992605759UL,1334883UL,8221498443370854688UL,14367UL,11622217167660319864UL,159UL,16854615406789148400UL,1UL,15227764177360188422UL,392100432777594597UL,4638790911783048UL,55597243312936UL,671383790702UL,7516757311UL},
-/*74*/ {9917805789996281964UL,11920651794986616114UL,67012201283758661UL,17031607066347875855UL,226392571904590UL,1366260920994077891UL,1529679539895UL,16212452638535237092UL,12919590708UL,10700183284086040599UL,122212344UL,9972718832652346008UL,1238638UL,11567969817650339136UL,13151UL,10485765172171133286UL,144UL,7391000361405278305UL,1UL,11550126947666480894UL,344558648887395940UL,4021256745099154UL,47544778530065UL,566435474043UL,6263225762UL},
-/*75*/ {9984593115589071938UL,8913835544056271515UL,66563954103927146UL,4732600735633461501UL,221879847013090UL,8993190784990756082UL,1479198980087UL,4979086358222370207UL,12326658167UL,7266467148519648057UL,115048809UL,10373401382548715390UL,1150488UL,1763940980359071879UL,12052UL,13510955046624137439UL,130UL,10538034506638660398UL,1UL,8315642191370249477UL,303307040434007501UL,3492622300302313UL,40744074543638UL,478982814954UL,5231450460UL},
-/*76*/ {10050936656832218159UL,3517289075780633165UL,66124583268633014UL,3785304969478794255UL,217515076541555UL,17852394942895019696UL,1431020240404UL,17957393248540688360UL,11768258555UL,17744898896370640546UL,108391855UL,2226562550696738777UL,1069656UL,8577863822434044924UL,11058UL,8826612325968090096UL,118UL,4129588719256363862UL,1UL,5466034316893420177UL,267445544564346414UL,3039150423891209UL,34987586614392UL,405931851673UL,4380007706UL},
-/*77*/ {10116845144383624606UL,11656753199936621788UL,65693799638854705UL,4387919089957665419UL,213291557269008UL,14448224807967398639UL,1385010112136UL,7759998996917964630UL,11241965195UL,16832754344579851504UL,102199683UL,11053373810313233491UL,995451UL,8552438427931328027UL,10157UL,12322355134603097633UL,107UL,3379167272494952795UL,1UL,2951316348331781566UL,236212352636756748UL,2649368241397547UL,30104277165836UL,344766354462UL,3675611624UL},
-/*78*/ {10182327026334571527UL,6685538979505051362UL,65271327091888279UL,397601097439959625UL,209202971448359UL,16023927067540794085UL,1341044688771UL,9917331315291175381UL,10745550390UL,14712700277343033536UL,96434426UL,10774389403978678365UL,927254UL,1877325289761038265UL,9340UL,8701718893603937581UL,97UL,5470943259278797689UL,1UL,728524283899193650UL,208961255525037192UL,2313671173886719UL,25952834439644UL,293434371788UL,3091438760UL},
-/*79*/ {10247390480849666243UL,17360278906661226917UL,64856901777529533UL,3495669981292646961UL,205243360055473UL,3805487451811433284UL,1299008607946UL,607843087470573275UL,10276966835UL,296687747110627342UL,91061731UL,8291988557456311564UL,864510UL,2005121899018347417UL,8598UL,3722634290266505168UL,88UL,7948203744456534684UL,0UL,17207401710078876714UL,185142927945931745UL,2024000090699914UL,22416216034923UL,250258125004UL,2605813022UL},
-/*80*/ {10312043428088987146UL,18000430520700691482UL,64450271425556169UL,12333470639586957247UL,201407098204863UL,557356772821788838UL,1258794363780UL,7266888958853226650UL,9834330967UL,633233322293762249UL,86050395UL,17737473532416852204UL,806722UL,8524969722726487247UL,7923UL,3081323293018753618UL,80UL,8663794454956077593UL,0UL,15462534585981475639UL,164289428436130044UL,1773577389927029UL,19397246044529UL,213862231714UL,2201170236UL},
-/*81*/ {10376293541461622784UL,0UL,64051194700380387UL,10248191152060861992UL,197688872532038UL,4301709866297150665UL,1220301682296UL,9819269754353780431UL,9415908042UL,7591106148504182357UL,81372044UL,14959639959556984512UL,753444UL,15852408284604292508UL,7308UL,10109156846635829230UL,73UL,5737908712710299833UL,0UL,13913068168837198886UL,146001331348509627UL,1556690691367327UL,16815052539158UL,183116362325UL,1863240356UL},
-/*82*/ {10440148258255871223UL,6974987521162618580UL,63659440599121165UL,18376794338633045912UL,194083660363174UL,5286353637785429853UL,1183436953433UL,18254017643772729064UL,9020098730UL,8153341690892931738UL,77000842UL,15141941367338905037UL,704276UL,26013219346059930UL,6748UL,5335021931839870907UL,66UL,15968803030571468962UL,0UL,12535100729932897670UL,129937018682798041UL,1368515104410653UL,14602177251331UL,157089296969UL,1580399667UL},
-/*83*/ {10503614789687787167UL,10161280856418332040UL,63274787889685464UL,15952082430101712115UL,190586710511100UL,14716543728582599511UL,1148112713922UL,5422652164256847206UL,8645427062UL,12320141779217819030UL,72913240UL,5304553139396836571UL,658854UL,10715929281815357762UL,6237UL,101441671245788533UL,61UL,1015008327357060907UL,0UL,11307895549840790652UL,115803748701064857UL,1204966831829958UL,12702224473078UL,135012014022UL,1343156132UL},
-/*84*/ {10566700130406508953UL,9367671343862619820UL,62897024585753029UL,8949725841156763685UL,187193525552836UL,7328472284656329976UL,1114247175909UL,13659075818003791361UL,8290529582UL,12207305826779312065UL,69087746UL,9632545319969866635UL,616854UL,16226905933404580212UL,5769UL,16622089491978568738UL,55UL,14942879858973237649UL,0UL,10213430593872362857UL,103350189771138838UL,1062582294943162UL,11067943680243UL,116247954437UL,1143739387UL},
-/*85*/ {10629411067491832079UL,17636675944714852323UL,62525947455834306UL,6505850448785755272UL,183899845458336UL,3599973409745929244UL,1081763796813UL,13693468980571448273UL,7954145564UL,14885210095697593596UL,65504728UL,3334487757148920552UL,577982UL,16522981357863345916UL,5342UL,12894938170961441305UL,51UL,1289745725211588596UL,0UL,9236016602364451099UL,92360165381110313UL,938418097074161UL,9659661968558UL,100269003555UL,975773172UL},
-/*86*/ {10691754188976791336UL,8465351934666085528UL,62161361563818554UL,5197145741120491639UL,180701632452960UL,16853124374668370674UL,1050590886354UL,7819876149312519355UL,7635108185UL,13194773222186152033UL,62146229UL,7722043672930483397UL,541972UL,17173481077114362994UL,4951UL,10697897188115161445UL,46UL,14405340544956101770UL,0UL,8361972557157459652UL,82647402638399265UL,829968043537654UL,8443999360258UL,86636041022UL,834012938UL},
-/*87*/ {10753735891925544260UL,5002486305294571376UL,61803079838652553UL,4057349201760100757UL,177595057007622UL,5153423920550535768UL,1020661247170UL,4482279741473272081UL,7332336545UL,14079289881858165084UL,58995811UL,5308054399115118866UL,508584UL,10700344028761083769UL,4593UL,2368403444427797483UL,42UL,16520823000248268491UL,0UL,7579349368433081504UL,74051114059723211UL,735094156305409UL,7392813434241UL,74983150336UL,714135101UL},
-/*88*/ {10815362390094591593UL,717462364347603762UL,61450922670991997UL,12686213041381837207UL,174576484860772UL,13294637680937210962UL,991911845799UL,15587572503351981956UL,7044828450UL,5220245677400564475UL,56038408UL,2347367690736820009UL,477600UL,1277738525107147142UL,4264UL,5281906686421014471UL,39UL,6861485585994722992UL,0UL,6877694170772068803UL,66432272850780288UL,651969198132212UL,6482330332616UL,65004767929UL,612567338UL},
-/*89*/ {10876639721203305200UL,16778322265980900536UL,61104717534850029UL,4032329197005302591UL,171642464985533UL,14571818578397160642UL,964283511154UL,12621504783692422278UL,6771653870UL,8638389140790037446UL,53260198UL,18100152885518642262UL,448821UL,16630238972171812715UL,3962UL,5757823942685209758UL,36UL,3187474562461331607UL,0UL,6247848887571979596UL,59670466572741907UL,579028683975575UL,5692427608248UL,56445199470UL,526351599UL},
-/*90*/ {10937573753837842284UL,2004219560527036286UL,60764298632432457UL,2470700429608645969UL,168789718423423UL,9076512226322775501UL,937720657907UL,16754976645783212170UL,6511949013UL,4599937633511104277UL,50648492UL,6000224543203313978UL,422070UL,14192505661030110817UL,3684UL,13739356786335959619UL,33UL,4889444745496671446UL,0UL,5681777769980017220UL,53661234212494415UL,514930730359387UL,5006041071445UL,49090047251UL,453033243UL},
-/*91*/ {10998170194010790285UL,13839704208191330737UL,60429506560498847UL,13353643834418365889UL,166015127913458UL,6878198059849471831UL,912171032491UL,9767943017230577666UL,6264910937UL,8150207520054148478UL,48191622UL,10988842316888902015UL,397183UL,12962745938655620354UL,3429UL,6873798812963024176UL,30UL,11425885177593679397UL,0UL,5172419481424698878UL,48313808102731135UL,458522394249676UL,4408673134307UL,42759184241UL,390571115UL},
-/*92*/ {11058434591397295067UL,2084711249241425044UL,60100187996724429UL,13144609700571699382UL,163315728251968UL,10311758545682145937UL,887585479630UL,4868236272194236456UL,6029792660UL,9807841535472319884UL,45878857UL,3683770460886114604UL,374012UL,7799719138058963230UL,3194UL,3790334137930832325UL,28UL,3868191596639666640UL,0UL,4713560014905483532UL,43549195584683227UL,408811396493693UL,3887984423108UL,37300982838UL,337264424UL},
-/*93*/ {11118372345266962509UL,454566784667801423UL,59776195404661088UL,13986266027837175155UL,160688697324357UL,14120595653121907980UL,863917727550UL,5728951655132071964UL,5805898706UL,12088390293143068376UL,43700312UL,15602121072787289072UL,352421UL,16192342588974673006UL,2977UL,8311741243459850454UL,26UL,233777089409511766UL,0UL,4299723324309452253UL,39298546336934999UL,364942322357524UL,3433453854861UL,32587563879UL,291693158UL},
-/*94*/ {11177988710129478926UL,5709327478371917577UL,59457386756007866UL,11608644298809037276UL,158131347755340UL,1306446782487386496UL,841124190187UL,18061209342260872596UL,5592581051UL,14421220534154150732UL,41646880UL,3188390812032850230UL,332288UL,17294731612713848330UL,2777UL,9059552643311538483UL,24UL,139632915332910805UL,0UL,3926077044974892680UL,35501760362604798UL,326176552249127UL,3036095128295UL,28510877173UL,252669411UL},
-/*95*/ {11237288801110657933UL,18355991183425536275UL,59143625269003462UL,14951093865584141754UL,155641119128956UL,8874364513896638123UL,819163784889UL,4512761010023869933UL,5389235426UL,16656030915185680838UL,39710155UL,14336430398274917370UL,313501UL,4239427730154935381UL,2592UL,15999124912671470775UL,22UL,3243654675442674821UL,0UL,3588351090239836485UL,32106299099300970UL,291875306539691UL,2688219798897UL,24979461229UL,219197546UL},
-/*96*/ {11296277599074481128UL,1804969390868443706UL,58834779161846255UL,16150301946739964140UL,153215570733974UL,11523234728029486348UL,797997764239UL,8322620963890886955UL,5195297944UL,4930080926800070983UL,37882380UL,15561958102129652466UL,295956UL,1850960054580304815UL,2422UL,4791538317139413089UL,20UL,9239906223001880605UL,0UL,3282767254242668168UL,29066168285891612UL,261485295239880UL,2383238900535UL,21915759014UL,190441513UL},
-/*97*/ {11354959955505648531UL,3894422924385499391UL,58530721420132208UL,17040523773806161023UL,150852374794155UL,3276853404087772252UL,777589560794UL,11332161846265586940UL,5010242015UL,7917637053550832633UL,36156385UL,12513444152220844326UL,279559UL,12600603154230209252UL,2264UL,8754920920202982938UL,18UL,17854473650892803032UL,0UL,3005978238576661189UL,26341046324891790UL,234526550736866UL,2115496527723UL,19253889842UL,165697981UL},
-/*98*/ {11413340597166184435UL,14865775976513627851UL,58231329577378492UL,358193919375725931UL,148549310146373UL,12988927444549010050UL,757904643603UL,17477737658575589701UL,4833575533UL,3476113636266982575UL,34525539UL,9643488792978680814UL,264226UL,1250252725053173705UL,2118UL,7942661649746456773UL,17UL,10395086669721413107UL,0UL,2755014761193767895UL,23895536111557673UL,210582093527565UL,1880129970561UL,16937796266UL,144374209UL},
-/*99*/ {11471424130538748039UL,6462061391729139299UL,57936485507771454UL,13727946667813299125UL,146304256332756UL,3668116122265551255UL,738910385518UL,17906277668053025479UL,4664838292UL,7706022672183779321UL,32983705UL,1805996062256247891UL,249876UL,10215290253354635586UL,1983UL,2716322885548954174UL,16UL,5088160271174520828UL,0UL,2527239608122441269UL,21698521816689209UL,189289139842848UL,1672951952386UL,14919699893UL,125969778UL},
-/*100*/ {11529215046068469760UL,0UL,57646075230342348UL,14757395258967641292UL,144115188075855UL,16085560832274728947UL,720575940379UL,5153282424431498518UL,4503599627UL,6834444892333065921UL,31525197UL,7223624558919085885UL,236438UL,18085869516241396525UL,1857UL,13555521451218405925UL,15UL,1735757933267499690UL,0UL,2320307658616951971UL,19722615036630587UL,170331608619998UL,1490351301016UL,13158812193UL,110061485UL},
-/*101*/ {11586717722214367606UL,248944417306331613UL,57359988723833503UL,1232398105476888UL,141980170108498UL,14200343166638059425UL,702872129249UL,18334401771824495366UL,4349456245UL,6620042165676144823UL,30144746UL,4703227756391524941UL,223847UL,2317937838995292216UL,1741UL,7101894871460520792UL,14UL,159867159632023668UL,0UL,2132131057650984321UL,17943677164483462UL,153433725360509UL,1329209022267UL,11620256210UL,96290823UL},
-/*102*/ {11643936429320688241UL,9205850380673633956UL,57078119751572001UL,3390859711313367861UL,139897352332284UL,5840737365734915459UL,685771334962UL,3283938843231757326UL,4202030238UL,13629117189447661308UL,28837462UL,7797761564437453385UL,212040UL,3041368611660924875UL,1633UL,6689058120977128391UL,13UL,200223914526503681UL,0UL,1960848830629191977UL,16340406875613001UL,138354553554509UL,1186827266432UL,10274163048UL,84353591UL},
-/*103*/ {11700875333317859724UL,9600667140933012106UL,56800365695717765UL,12045943558339868585UL,137864965280868UL,6700511676070541366UL,669247404276UL,1107094371653324835UL,4060967258UL,17647536167404585172UL,27598806UL,11331256838168772649UL,200962UL,3395759300894629471UL,1532UL,18421478037654635084UL,12UL,1712392830575292734UL,0UL,1804800337474202564UL,14893983327289827UL,124883311814903UL,1060869106580UL,9094913460UL,73991247UL},
-/*104*/ {11757538499262133004UL,6393526083705556174UL,56526627400298716UL,6770894594642459033UL,135881315866102UL,12609726470019603614UL,653275557048UL,10525603495998781150UL,3925934838UL,595372446212752246UL,26424561UL,7560077483195773121UL,190561UL,13667862170860686774UL,1439UL,12608023959220711812UL,11UL,4566071017521983858UL,0UL,1662502049883394700UL,13587757103489402UL,112835357661150UL,949307399380UL,8060500126UL,64983707UL},
-/*105*/ {11813929894722423256UL,14068119698973938286UL,56256809022487729UL,14648703028260759555UL,133944783386875UL,10092745466447019207UL,637832301842UL,4879350807240343662UL,3796620844UL,5519146157694735652UL,25310805UL,11596753927242488102UL,180791UL,8647393705130383751UL,1352UL,15888752114081221976UL,10UL,8643587606348589689UL,0UL,1532627209054857837UL,12406982138071823UL,102048737852037UL,850381288891UL,7151990513UL,57143330UL},
-/*106*/ {11870053393022336465UL,11252383998836668009UL,55990817891614794UL,11973850575929458676UL,132053815782110UL,6728236881903774519UL,622895357462UL,14475885627913628190UL,3672732060UL,9439244551691822001UL,24253890UL,17812975157590062273UL,171607UL,13264989706916899153UL,1272UL,458807590909334385UL,9UL,13838574858741893487UL,0UL,1413987983647001608UL,11338582861164143UL,92381220963570UL,762559152773UL,6353073683UL,50309895UL},
-/*107*/ {11925912776344878097UL,14105597977675174423UL,55728564375443355UL,11013280819340131914UL,130206926110848UL,17739778259612069711UL,608443579957UL,4392883093201352821UL,3553992873UL,10735976892639772029UL,23250420UL,12327838200612957346UL,162970UL,4396397013954529942UL,1196UL,13110015069044947957UL,9UL,1608045774652146856UL,0UL,1305519800903995970UL,10370951666221351UL,83707741093255UL,684506987944UL,5649677321UL,44346387UL},
-/*108*/ {11981511738706886326UL,3317905023383705171UL,55469961753272621UL,16241663328834252371UL,128402689243686UL,11524110692492369510UL,594456894646UL,12863591304393171215UL,3440144066UL,4472624115400608209UL,22297230UL,1087968982757132944UL,154841UL,16148456404653371936UL,1126UL,9133450324682057019UL,8UL,8758324380908251139UL,0UL,1206267569204093502UL,9493772515115559UL,75918192596645UL,615061396322UL,5029643564UL,39135460UL},
-/*109*/ {12036853888809809348UL,2937912475406404295UL,55214926095457841UL,859657583543586791UL,126639738751050UL,1736642579370722925UL,580916232802UL,18116237955748691075UL,3330941701UL,15715915500202276930UL,21391368UL,13419815591294266973UL,147188UL,5846368442197667023UL,1060UL,18271297585855363159UL,7UL,16763651692934535825UL,0UL,1115373548986003441UL,8697867107360759UL,68915524995949UL,553206466979UL,4482454189UL,34576475UL},
-/*110*/ {12091942752773052473UL,14649087025788158955UL,54963376148968420UL,6187551838211751940UL,124916763974928UL,4206504452748106606UL,567803472613UL,5720841370295443251UL,3226156094UL,7264466945774166221UL,20530084UL,4372828399670373542UL,139977UL,15625698365042700690UL,999UL,15527819678491625230UL,7UL,7105590882372771815UL,0UL,1032066662098366900UL,7975060555194497UL,62614094947619UL,498053963876UL,3998997267UL,30582995UL},
-/*111*/ {12146781776755753583UL,13280021388072178004UL,54715233228629520UL,11942182089768189455UL,123232507271688UL,2021139409071681669UL,555101384106UL,12971681148233160559UL,3125570856UL,8423929643437387409UL,19710807UL,3742472695376142250UL,133181UL,2393450068214903165UL,942UL,13347504212048856966UL,6UL,16612522878348660723UL,0UL,955653057953498137UL,7318063943642565UL,56938238666288UL,448826322190UL,3571368743UL,27080676UL},
-/*112*/ {12201374329472503228UL,8334466947682830389UL,54470421113716532UL,4978299604331499676UL,121585761414545UL,15328497979964921195UL,542793577743UL,9374154367451536493UL,3028982018UL,12137399043643704884UL,18931137UL,11374489489169822649UL,126771UL,199695760465401688UL,889UL,6224824150736902370UL,6UL,8331781078844325363UL,0UL,885507779166948481UL,6720371526320673UL,51821033682568UL,404842034597UL,3192703448UL,24005493UL},
-/*113*/ {12255723704608206189UL,5167699523455212182UL,54228865949593832UL,12837639465025906265UL,119975367145119UL,1824102607761606577UL,530864456394UL,6129778354583973041UL,2936197214UL,10522428479711974605UL,18188832UL,5582881855107753724UL,120722UL,6240384391081974552UL,839UL,7552684836769323576UL,6UL,656273674347835005UL,0UL,821067390233489429UL,6176170623945249UL,47203223432333UL,365503074246UL,2857030974UL,21302228UL},
-/*114*/ {12309833123136983026UL,395688868494857446UL,53990496154109574UL,12461378404472657045UL,118400210864275UL,7066216770241084724UL,519299170457UL,6422627186812699999UL,2847034925UL,13890496520202963257UL,17481793UL,7447808797525633170UL,115011UL,14733577906028586004UL,792UL,12688329356663178072UL,5UL,11983727693154464162UL,0UL,761823450737307453UL,5680262561993384UL,43032282076355UL,330284055937UL,2559152579UL,18923200UL},
-/*115*/ {12363705735549731425UL,10944743690765043066UL,53755242328477093UL,2854699070741736303UL,116859222453211UL,1329559246745993339UL,508083575883UL,9710372139850442101UL,2761323781UL,17998247615944888552UL,16808057UL,14818827868611507053UL,109617UL,14172312290169109310UL,748UL,17363440220043941591UL,5UL,5375988379065028893UL,0UL,707316730049761596UL,5227993213914574UL,39261600248420UL,298722882813UL,2294535906UL,16827181UL},
-/*116*/ {12417344623994706592UL,17518103160078571374UL,53523037172390976UL,12797401529972443232UL,115351373216359UL,15929946187529726479UL,497204194898UL,1897435602943316224UL,2678901912UL,3071428626471966023UL,16165787UL,7397232112574569102UL,104520UL,3268055961870929251UL,707UL,17651043976586545895UL,4UL,17685808378198382830UL,0UL,657132073795781758UL,4815191912825796UL,35849775224374UL,270412664453UL,2059224799UL,14978478UL},
-/*117*/ {12470752804335236165UL,17958329691374203449UL,53293815403142034UL,16552683081609702954UL,113875673938337UL,12569695082310357081UL,486648179223UL,12272713788492695784UL,2599616342UL,124683548251698084UL,15553260UL,3059436867638789078UL,99700UL,7114513341603758198UL,669UL,9935592761583339734UL,4UL,11982519386224190803UL,0UL,610893843877998289UL,4438117662812501UL,32759991374773UL,244994724560UL,1849761971UL,13346150UL},
-/*118*/ {12523933228128456969UL,10147089001647427038UL,53067513678510410UL,16379307628842981842UL,112431173047691UL,10117879827639634102UL,476403275625UL,14972228804687135396UL,2523322434UL,8462409270810202211UL,14968861UL,16589739063457922687UL,95141UL,1316987888718858793UL,633UL,9332638116417909584UL,4UL,6678903619391662118UL,0UL,568261863797333084UL,4093411725095538UL,29959478777229UL,222152543719UL,1663122580UL,11903345UL},
-/*119*/ {12576888784528747230UL,4515532052123606381UL,52844070523230030UL,6994632347420097697UL,111016954880735UL,6602817489239587962UL,466457793616UL,9871173591808204235UL,2449883369UL,15398295351194331648UL,14411078UL,11918196466973716789UL,90826UL,2322827196798348685UL,599UL,12770828494644235136UL,4UL,1743914919659519695UL,0UL,528927809622036360UL,3778055778014656UL,27419039577246UL,201606505678UL,1496657117UL,10626728UL},
-/*120*/ {12629622302119327620UL,2080940895131644293UL,52623426258830531UL,13843728642345212230UL,109632138039230UL,5063265004788117650UL,456800575163UL,8475854637970161517UL,2379169662UL,5712675807223090202UL,13878489UL,12853811073436920948UL,86740UL,10341337710209804963UL,567UL,17416434732900359815UL,3UL,15595894976182878547UL,0UL,492611994422852119UL,3489334956064524UL,25112633145363UL,183109335004UL,1348042221UL,9496000UL},
-/*121*/ {12682136550675316736UL,0UL,52405522936674862UL,10061860403841573609UL,108275873836105UL,1621539486569509793UL,447420966264UL,16547789270584885051UL,2311058710UL,847736269939364415UL,13369761UL,2444143145192631114UL,82870UL,7752110488426793346UL,538UL,2206451323474896660UL,3UL,11315352447635494698UL,0UL,459060500470989988UL,3224805164667669UL,23017012323015UL,166442130390UL,1215238285UL,8493480UL},
-/*122*/ {12734434242861350473UL,10179363997606083930UL,52190304274021928UL,3141376520572531558UL,106947344823815UL,7868983901336391938UL,438308790261UL,9936034662120031264UL,2245434376UL,6269117800779755209UL,12883639UL,15942507041104826669UL,79202UL,12988047643971778299UL,510UL,1617275282523307587UL,3UL,7325207219119806116UL,0UL,428042619125078448UL,2982264146152269UL,21111404112649UL,151410911780UL,1096452854UL,7603750UL},
-/*123*/ {12786518035866709415UL,6790282254780025598UL,51977715592954103UL,5801583641993558943UL,105645763400313UL,4023583738879909716UL,429454322765UL,9239728068313637138UL,2182186599UL,7714346510659322565UL,12418948UL,2338497779554602017UL,75725UL,5413306178765853693UL,483UL,13414361042990176532UL,3UL,3603615711990874792UL,0UL,399348563230471404UL,2759725840361085UL,19377229076925UL,137843611281UL,990108994UL,6813350UL},
-/*124*/ {12838390532980743074UL,17226208725094911069UL,51767703762019125UL,5573730928143555366UL,104370370487941UL,14478542692744272445UL,420848268096UL,9951191550387558940UL,2121211028UL,13141394945205101697UL,11974578UL,7155354793308199819UL,72426UL,16332943485211034337UL,458UL,17083847585325272649UL,3UL,130536041711155424UL,0UL,372787421119415360UL,2555397642011016UL,17797854490690UL,125587447832UL,894817921UL,6110517UL},
-/*125*/ {12890054285111233933UL,13277166114021088545UL,51560217140444935UL,13556125326411476137UL,103120434280889UL,16075779594780132856UL,412481737123UL,10320692823361631157UL,2062408685UL,11396351069448181279UL,11549488UL,11795948796868174226UL,69296UL,17189354193183609794UL,435UL,10712289962443639689UL,2UL,15334310605749767770UL,0UL,348185325019505251UL,2367660207675731UL,16358376957199UL,114506634128UL,809355285UL,5484961UL},
-/*126*/ {12941511792248207042UL,12261469430340971UL,51355205524794472UL,7173782463067326981UL,101895249057131UL,16411339538660608035UL,404346226417UL,3505588535726228245UL,2005685646UL,16798801843522112069UL,11142698UL,708218146032098614UL,66325UL,10764816293866420840UL,413UL,10974130979654864193UL,2UL,12304543913335218488UL,0UL,325383809924179463UL,2195049509203505UL,15045430773586UL,104480371536UL,732640607UL,4927667UL},
-/*127*/ {12992765504875561936UL,3311171854038693752UL,51152620097935283UL,3934784849741553075UL,100694134051053UL,13043928951400532642UL,396433598626UL,3609977907729010028UL,1950952749UL,2668577287697085315UL,10753282UL,16035778546705121662UL,63503UL,11787320723178278500UL,392UL,16226794741687492688UL,2UL,9472435145526058506UL,0UL,304238341815936987UL,2036240868468177UL,13847018823545UL,95401094948UL,663719419UL,4430733UL},
-/*128*/ {13043817825332782212UL,6448461645324402335UL,50952413380206180UL,9536791716308535999UL,99516432383215UL,3621506248217311908UL,388736063996UL,17235911483846875527UL,1898125312UL,8947243790707356404UL,10380372UL,14806325498448064753UL,60822UL,9166012662246344233UL,373UL,6500272282046068802UL,2UL,6823682532797251936UL,0UL,284616996614841437UL,1890034741401243UL,12752363199596UL,87172934750UL,601747733UL,3987223UL},
-/*129*/ {13094671109128863783UL,7805312945957596871UL,50754539182670014UL,12256583525388724509UL,98361510043934UL,2526218350164839800UL,381246162960UL,18170539585551902862UL,1847122882UL,10383892717426802821UL,10023147UL,7835438779162771452UL,58274UL,2083276605695566052UL,354UL,17274592207769375868UL,2UL,4345119374824768053UL,0UL,266399273398480091UL,1755344047966156UL,11751773122989UL,79710367670UL,545978536UL,3591042UL},
-/*130*/ {13145327666210495168UL,7375127450254948350UL,50558952562348058UL,6271879253602674964UL,97228754927592UL,7745504014081317166UL,373956749721UL,9395060468245161999UL,1797868989UL,843344986209764395UL,9680833UL,330906560460600272UL,55850UL,17703688485504671966UL,337UL,10343929718564245898UL,2UL,2024616118572229539UL,0UL,249475027345178698UL,1631182869708925UL,10836528044910UL,72937032057UL,495750010UL,3236832UL},
-/*131*/ {13195789762186421684UL,5647604455318644220UL,50365609779337487UL,6358223553775489655UL,96117575914766UL,3638116151041716232UL,366860976773UL,16911666770386771353UL,1750290919UL,13334882272285520636UL,9352699UL,10533797727230678292UL,53545UL,18260626105514338569UL,321UL,2935878937771427084UL,1UL,18297735623704650557UL,0UL,233743509524712423UL,1516656358263440UL,9998774085217UL,66784686506UL,450475270UL,2919874UL},
-/*132*/ {13246059619509829732UL,7534792151249739319UL,50174468255719052UL,308037001689727067UL,95027401999467UL,16630602681983780863UL,359952280301UL,272616798875425860UL,1704319509UL,18759306882657332UL,9038058UL,42023899522197726UL,51352UL,11110209634731418240UL,305UL,12363961582679649621UL,1UL,16260676263805821297UL,0UL,219112502130041312UL,1410951717143439UL,9231432200692UL,61192293568UL,409633398UL,2636010UL},
-/*133*/ {13296139418620497117UL,13612382415091967476UL,49985486536167282UL,7332783872761634914UL,93957681458961UL,1054013357300842449UL,353224366387UL,1321587032923993666UL,1659888939UL,14552092305457644067UL,8736257UL,10659195770209462960UL,49264UL,11259917148719548589UL,291UL,680750387328521935UL,1UL,14350663156496198366UL,0UL,205497539035715519UL,1313330135691754UL,8528116678908UL,56105212729UL,372761603UL,2381573UL},
-/*134*/ {13346031299048370168UL,11040950265332769072UL,49798624250180485UL,12981450881054956988UL,92907881063769UL,10383304882588861927UL,346671197999UL,2585495655260605465UL,1616936557UL,15344194447715963691UL,8446683UL,9427424318793128493UL,47276UL,3941724539711840150UL,277UL,3798991841279913527UL,1UL,12558905321516255161UL,0UL,192821202706034633UL,1223119568504137UL,7883062730753UL,51474488920UL,339448373UL,2153327UL},
-/*135*/ {13395737360480148008UL,16244533758961071607UL,49613842075852400UL,606735134624583276UL,91877485325652UL,10932527479114224259UL,340286982687UL,11108537286740968813UL,1575402697UL,11580643459433010913UL,8168754UL,13437353298057538876UL,45381UL,17906504567352865449UL,264UL,2358819804903505192UL,1UL,10877279221861920477UL,0UL,181012489478303185UL,1139708266277455UL,7291062108144UL,47256224681UL,309327464UL,1948408UL},
-/*136*/ {13445259663790378381UL,11085648654560486531UL,49431101705111685UL,4177709695407511526UL,90865995781455UL,5602739856355668250UL,334066160961UL,4293189766544328729UL,1535230519UL,2274708557569937176UL,7901921UL,14565646581612745776UL,43576UL,14288387328362371703UL,251UL,13956360175506258554UL,1UL,9298273662869195157UL,0UL,170006236130518080UL,1062538975089327UL,6747405806857UL,43411025585UL,282072637UL,1764287UL},
-/*137*/ {13494600232038497648UL,16783395869904677205UL,49250365810359480UL,8678710355126741913UL,89872930310874UL,17789342301594470793UL,328003395295UL,3027175480090564732UL,1496365854UL,8277816804372118924UL,7645664UL,17519575565916495645UL,41855UL,15311107751851200023UL,240UL,905315657734901581UL,1UL,7814939600343325178UL,0UL,159742601423248286UL,991103730804667UL,6247833030348UL,39903509954UL,257393045UL,1598724UL},
-/*138*/ {13543761051433179742UL,16326468250199576108UL,49071598012439057UL,727514162997445986UL,88897822486302UL,11797877123518965881UL,322093559732UL,18088473829801079338UL,1458757064UL,148758465075945024UL,7399492UL,6523951026975209682UL,40214UL,11664925345528697906UL,228UL,17806606970886667287UL,1UL,6420844388743451400UL,0UL,150166596995101133UL,924939183801861UL,5788485691397UL,36701874990UL,235029166UL,1449732UL},
-/*139*/ {13592744072265294671UL,11143112254112061687UL,48894762849875160UL,12713925288966318059UL,87940220953012UL,16213534232480625011UL,316331730046UL,14921885635767698499UL,1422354901UL,5342332773038197516UL,7162938UL,6489899779358140932UL,38648UL,17486433600915991004UL,218UL,8630226328853320764UL,1UL,5110030048218322985UL,0UL,141227662601136487UL,863622396671224UL,5365867816389UL,33777512503UL,214749243UL,1315550UL},
-/*140*/ {13641551209810716471UL,9887088004912606267UL,48719825749323987UL,7348127429238117270UL,86999688838078UL,10125890282246554398UL,310713174421UL,13080647203131206323UL,1387112385UL,14964023770288214286UL,6935561UL,17138058387032774290UL,37154UL,14684503213954326447UL,208UL,9625779605150450462UL,1UL,3876975171905291258UL,0UL,132879281223582703UL,806767064093935UL,4976809293767UL,31104668253UL,196346142UL,1194617UL},
-/*141*/ {13690184345204163030UL,13560385651130034031UL,48546752997177883UL,1618022139787798840UL,86075803186485UL,11221367445783978729UL,305233344632UL,17112842449233960805UL,1352984683UL,12112028236255673379UL,6716945UL,4390536514930247320UL,35728UL,7971153225986180025UL,199UL,1745182424975124358UL,1UL,2716560132944252409UL,0UL,125078630062681380UL,754020109875832UL,4618433475210UL,28660139696UL,179634586UL,1085542UL},
-/*142*/ {13738645326285195792UL,4530189338991770917UL,48375511712271816UL,3133710932665669889UL,85168154423013UL,14035435124604211211UL,299887867686UL,12325598820618695294UL,1319928995UL,1840466410397133761UL,6506692UL,4231038794949564696UL,34366UL,6127959510989856891UL,190UL,2873295392945638114UL,1UL,1624035284640188110UL,0UL,117786263839823876UL,705058621187155UL,4288128196636UL,26423007578UL,164448713UL,987092UL},
-/*143*/ {13786935968417455801UL,3583022416627236337UL,48206069819641453UL,15685810602545623353UL,84276345838534UL,188670508690722694UL,294672537896UL,17931410919580231010UL,1287904448UL,15687154998206946622UL,6304427UL,6862096131299769681UL,33065UL,3293194824892585403UL,181UL,12484850087314069217UL,1UL,594991877590013807UL,0UL,110965827221793446UL,659587084533073UL,3983519837393UL,24374397372UL,150639933UL,898168UL},
-/*144*/ {13835058055282163712UL,0UL,48038396025285290UL,12297829382473034411UL,83399993099453UL,11614616639002310276UL,289583309373UL,1897813176307567029UL,1256872002UL,8991417093083850803UL,6109794UL,8421604544345577618UL,31821UL,15608302835860892551UL,173UL,11641829908873792180UL,0UL,18072079518484336494UL,0UL,104583793509537551UL,617334891925782UL,3702450080833UL,22497267078UL,138075019UL,817790UL},
-/*145*/ {13883013339646865064UL,16970119211695367099UL,47872459791885741UL,11126564096679852925UL,82538723779113UL,6411934694676378841UL,284616288893UL,9118263231845318129UL,1226794348UL,12522659839673469359UL,5922455UL,8787672450649975810UL,30633UL,7201517989545853019UL,165UL,18331286954808999704UL,0UL,17158005503672110354UL,0UL,98609227032408535UL,578054089212579UL,3442955078831UL,20776218302UL,126634430UL,745088UL},
-/*146*/ {13930803544110358225UL,2691078439650096306UL,47708231315446432UL,5126292289075766360UL,81692176910011UL,261473022052657841UL,279767729143UL,16110209629513658622UL,1197635826UL,15025357607834343780UL,5742089UL,10710504118711151544UL,29497UL,655170633144881890UL,158UL,13676137059018839296UL,0UL,16295976930293866958UL,0UL,93013566953560264UL,541517341592382UL,3203246757297UL,19197327937UL,116210825UL,679281UL},
-/*147*/ {13978430361824700713UL,16168718576420690444UL,47545681502805104UL,8650927403655201571UL,80860002555790UL,18335968480357199567UL,275034022298UL,11230804127893392467UL,1169362339UL,13004391688370371148UL,5568392UL,1730916805185007817UL,28410UL,3020544526346374848UL,151UL,15720078526204515387UL,0UL,15482703927522251080UL,0UL,87770430427974967UL,507516094075360UL,2981696030023UL,17747998065UL,106707745UL,619676UL},
-/*148*/ {14025895457195150119UL,3745102695150630677UL,47384781949983615UL,4935938799047990569UL,80041861401999UL,6458466152123184417UL,270411693925UL,12423515327095689034UL,1141941275UL,441964677768764459UL,5401073UL,11032744768903603505UL,27370UL,5633556458616076508UL,145UL,5638715196661074805UL,0UL,14715124947845836129UL,0UL,82855433264756552UL,475858907049779UL,2776817714879UL,16416822013UL,98038446UL,565653UL},
-/*149*/ {14073200466558858233UL,10609286885361199510UL,47225504921338450UL,8268544458687018673UL,79237424364661UL,15303624357166452209UL,265897397196UL,15712516359079473186UL,1115341431UL,3594312273994274353UL,5239859UL,1341585101882470280UL,26375UL,2389973236545771661UL,139UL,1524776098852489718UL,0UL,13990389526207255485UL,0UL,78246026432798404UL,446369949254675UL,2587256969760UL,15193464727UL,90124868UL,516655UL},
-/*150*/ {14120346998843101410UL,2256211738585554632UL,47067823329477004UL,12920241557391971313UL,78446372215795UL,144512029753716963UL,261487907385UL,18139780045913571474UL,1089532947UL,8146032949105901966UL,5084487UL,1624434810768181567UL,25422UL,8032455846117491329UL,133UL,3046258803579009294UL,0UL,13305842444954253871UL,0UL,73921346916296245UL,418887632349398UL,2411777086355UL,14068555853UL,82896710UL,472187UL},
-/*151*/ {14167336636203796255UL,8431588543381826024UL,46911710715906610UL,2165786858023894479UL,77668395225010UL,17411936935219318403UL,257180116639UL,2012277308920281353UL,1064487237UL,13736493633120437269UL,4934709UL,906609799018411322UL,24510UL,2661567158625469765UL,127UL,9891670544079496896UL,0UL,12659009181609015704UL,0UL,69862081576103067UL,393263372950377UL,2249248497965UL,13033594093UL,76290617UL,431803UL},
-/*152*/ {14214170934645017581UL,13901885346762687541UL,46757141232384926UL,4718095983626309743UL,76903192816422UL,10626773884509818051UL,252971029001UL,7195205837441568774UL,1040176928UL,8479286577502819090UL,4790288UL,8971157002824176832UL,23636UL,5384112546021959440UL,122UL,3321892850571352483UL,0UL,12047582527944352595UL,0UL,66050342806616443UL,369360469496699UL,2098638873671UL,12080861601UL,70249455UL,395106UL},
-/*153*/ {14260851424620204932UL,1636164554212132361UL,46604089622941846UL,3381221675431199421UL,76150473240101UL,1030343987224764631UL,248857755686UL,11155810449749973243UL,1016575799UL,6887745802053011622UL,4651000UL,7181132977989630281UL,22799UL,396902496435427169UL,117UL,1509125182240864118UL,0UL,11469410279199860161UL,0UL,62469554897515391UL,347053082631574UL,1959004185269UL,11203347290UL,64721663UL,361737UL},
-/*154*/ {14307379611615714882UL,5141176724390817561UL,46452531206544528UL,15468834895264464722UL,75409953257377UL,8889131624534564518UL,244837510575UL,16618952078058702471UL,993658727UL,18199757981860844522UL,4516630UL,10731528433377153579UL,21996UL,10653152576937192897UL,112UL,4195458631735484395UL,0UL,10922483901596418591UL,0UL,59104350116784253UL,326225308965646UL,1829480645941UL,10394678088UL,59660680UL,331376UL},
-/*155*/ {14353756976717348627UL,3550204621850717963UL,46302441860378543UL,17684623208108346929UL,74681357839320UL,4283175847981571335UL,240907605933UL,5369323040264003922UL,971401636UL,15269967169962589003UL,4386975UL,2472988434244559244UL,21227UL,5516236482159675770UL,107UL,11138512951908808738UL,0UL,10404928094719643359UL,0UL,55940473627452580UL,306770339137583UL,1709277430666UL,9649057258UL,55024430UL,303735UL},
-/*156*/ {14399984977160458002UL,4796980064524366427UL,46153798003719416UL,12431452678024135275UL,73964419877755UL,8770300798871877265UL,237065448326UL,2570449666565328833UL,949781443UL,11332578692944185196UL,4261839UL,14961969440896380271UL,20489UL,11335088782701965869UL,103UL,3663665611759925292UL,0UL,9914991172936654820UL,0UL,52964696436561471UL,288589692022295UL,1597670098182UL,8961209035UL,50774865UL,278555UL},
-/*157*/ {14446065046864207998UL,15570979783528929195UL,46006576582370089UL,3104463922345304501UL,73258879908232UL,11548845358105412563UL,233308534739UL,10963831984293254816UL,928776014UL,1673891522375180296UL,4141039UL,10206045284481857616UL,19782UL,665604715607236759UL,99UL,3331051806941856UL,0UL,9451036196870068235UL,0UL,50164735652116444UL,271592517770605UL,1493994642960UL,8326328884UL,46877560UL,255604UL},
-/*158*/ {14491998596950549936UL,16559168862347672004UL,45860755053640980UL,14996600163708838246UL,72564485844368UL,11815634819529062802UL,229634448874UL,10778533368297742276UL,908364117UL,7076917175925231442UL,4024397UL,18232919260218143691UL,19103UL,2859397855669399499UL,94UL,18402587730082235559UL,0UL,9011532792153510777UL,0UL,47529181393159855UL,255694963107874UL,1397642113379UL,7740038783UL,43301345UL,234671UL},
-/*159*/ {14537787016248436695UL,11360113470333517275UL,45716311371850429UL,15872079388657361976UL,71880992723035UL,4926685263908131423UL,226040857619UL,11211158149339155952UL,888525383UL,13371551567991960433UL,3911746UL,17937127973938592611UL,18451UL,11744343555901028752UL,91UL,3331379913850029718UL,0UL,8595049598301253703UL,0UL,45047429760438669UL,240819592983024UL,1308053739053UL,7198346999UL,40017979UL,215569UL},
-/*160*/ {14583431671783789712UL,2672292747369381715UL,45573223974324342UL,15688083377488648191UL,71208162459881UL,14493677513093255562UL,222525507687UL,2408781826672452722UL,869240264UL,7431341489917016645UL,3802926UL,2891757450443367154UL,17826UL,3991134303942573568UL,87UL,9951194567070120967UL,0UL,8200247295600530789UL,0UL,42709621331207023UL,226894863252691UL,1224716516361UL,6697611874UL,37001862UL,198126UL},
-/*161*/ {14628933909255706782UL,17984937384723808356UL,45431471767874865UL,14492436161365002533UL,70545763614712UL,9675536007766279343UL,219086222405UL,17331031820708232506UL,850489993UL,14976487375648435060UL,3697782UL,10732145431213124949UL,17225UL,12825224057714438426UL,84UL,1200166322484681118UL,0UL,7825872162532251577UL,0UL,40506584692154117UL,213854639615702UL,1147159206589UL,6234509204UL,34229771UL,182190UL},
-/*162*/ {14674295053499379988UL,16477891387844728435UL,45291034115738827UL,2328233501037737016UL,69893571166263UL,11475873603712942960UL,215720898661UL,5671924496607896767UL,832256553UL,8804012898118698146UL,3596170UL,5401262067286437840UL,16648UL,17276127615539886771UL,80UL,13813113492148433794UL,0UL,7470750120391904419UL,0UL,38429784569878982UL,201637758487716UL,1074948705873UL,5806002835UL,31680627UL,167623UL},
-/*163*/ {14719516408936174261UL,17150633996856960479UL,45151890824957589UL,14029130123322442361UL,69251366295947UL,4123937148483446973UL,212427503975UL,5501405252448803537UL,814522637UL,17378575156981490659UL,3497949UL,18057378134492851280UL,16094UL,15898622809213369660UL,77UL,10746970652146337545UL,0UL,7133781225560245487UL,0UL,36471274159270990UL,190187625930916UL,1007686750396UL,5409318141UL,29335286UL,154299UL},
-/*164*/ {14764599260011299174UL,2540139834159244123UL,45014022134180790UL,3044708292117301925UL,68618936180153UL,11871296810057237933UL,209204073719UL,18089256538020802763UL,797271622UL,7534807458711795650UL,3402988UL,11662607941723572319UL,15562UL,8264385813031035016UL,74UL,10307424725672533297UL,0UL,6813934573301178234UL,0UL,34623651287067474UL,179451851134446UL,945006924070UL,5041918085UL,27176351UL,142107UL},
-/*165*/ {14809544871619489408UL,11194157816020180852UL,44877408701877240UL,11660960379235172476UL,67996073790723UL,1694644855760315560UL,206048708456UL,13588646832627822296UL,780487532UL,610464391751152386UL,3311159UL,4183851838975533370UL,15050UL,13350982543449063586UL,71UL,12361405489822787109UL,0UL,6510243580076354396UL,0UL,32880018081164393UL,169381911282767UL,886571939325UL,4701481602UL,25188003UL,130943UL},
-/*166*/ {14854354489519093030UL,12408654430000454969UL,44742031594937027UL,3704499287032623077UL,67382577703218UL,7645420360778854394UL,202959571395UL,4356901982259409277UL,764155012UL,14448758736818916529UL,3222340UL,7661876058780159900UL,14558UL,14147487375934927719UL,68UL,16783332779848360499UL,0UL,6221801614193237356UL,0UL,31233943846324730UL,159932844955516UL,832071164614UL,4385884059UL,23355850UL,120715UL},
-/*167*/ {14899029340734951072UL,2482871288904956628UL,44607872277649554UL,1995705562701942559UL,66778251912649UL,610515082611245626UL,199934885966UL,277976752847781447UL,748259303UL,14112247250819910656UL,3136416UL,4488580900786388807UL,14085UL,12943925103590462098UL,66UL,5007909200323085809UL,0UL,5947757947173265022UL,0UL,29679430874093460UL,151062971477509UL,781218374957UL,4093179588UL,21666789UL,111341UL},
-/*168*/ {14943570633950437035UL,17561615613837741850UL,44474912601042967UL,6805092668690811282UL,66182905656313UL,17331399707112228990UL,196972933500UL,17235602067792267513UL,732786210UL,17357943112509669905UL,3053275UL,16213225827464647810UL,13630UL,12836868559162700674UL,63UL,13816664396019274931UL,0UL,5687314000564116256UL,0UL,28210882939283540UL,142733633884744UL,733749704219UL,3821585101UL,20108886UL,102744UL},
-/*169*/ {14987979559889010688UL,0UL,44343134792571037UL,9932862193535912409UL,65596353243448UL,5172141260539410012UL,194072051016UL,2198348829020477735UL,717722082UL,2955242946794649052UL,2972813UL,6605041491803628103UL,13192UL,17684701982493328748UL,61UL,6210343433534711007UL,0UL,5439719865047188994UL,0UL,26823076257608403UL,134908963394408UL,689421779988UL,3569465821UL,18671266UL,94855UL},
-/*170*/ {15032257291685626892UL,12168222819894808637UL,44212521446134196UL,13708081557043240635UL,65018413891373UL,15103084980205226381UL,191230629092UL,5090147893632922136UL,703053783UL,7885707575161547449UL,2894927UL,6336916623441988302UL,12771UL,13618866957057074735UL,59UL,535739044127690392UL,0UL,5204271070628257891UL,0UL,25511132699139088UL,127555663466833UL,648010023804UL,3335322164UL,17344010UL,87614UL},
-/*171*/ {15076404985248327238UL,14499305650525725555UL,44083055512422009UL,8672451337555713404UL,64448911567868UL,8022449475481421847UL,188447109847UL,10487399999342498348UL,688768676UL,6335574914049030029UL,2819520UL,16552491780889693622UL,12366UL,5897886250385865152UL,56UL,15145108028977601507UL,0UL,4980305588463903385UL,0UL,24270495070469368UL,120642811727279UL,609307101235UL,3117777862UL,16118071UL,80963UL},
-/*172*/ {15120423779610329762UL,3251202879956011361UL,43954720289564912UL,1832675876122327809UL,63887674839483UL,16304437605656293184UL,185719984998UL,9217144401773225637UL,674854596UL,12018513752838085216UL,2746501UL,4896545300922432412UL,11976UL,423533135186642646UL,54UL,13055610783259187190UL,0UL,4767201046484903216UL,0UL,23096904294968920UL,114141678177509UL,573121507809UL,2915569183UL,14985189UL,74851UL},
-/*173*/ {15164314797272920171UL,17209221108414452139UL,43827499414083584UL,5754366580911377096UL,63334536725554UL,5766258795523373593UL,183047794004UL,9080094657011985977UL,661299833UL,15334004819294526858UL,2675779UL,12441623065498179740UL,11600UL,3705966484529917214UL,52UL,12629468958461123356UL,0UL,4564372142444953777UL,0UL,21986378335461872UL,108025558273210UL,539276278209UL,2727535146UL,13937819UL,69232UL},
-/*174*/ {15208079144539436604UL,9319306944134595561UL,43701376852124817UL,15293050575208291555UL,62789334557650UL,11074116852459901315UL,180429122292UL,1834090274018921425UL,648093111UL,12569456776757722361UL,2607271UL,2563140541900268757UL,11238UL,4384198554292782261UL,50UL,13786702344048103480UL,0UL,4371268239362002840UL,0UL,20935192717237370UL,102269619575080UL,507607807338UL,2552608646UL,12969067UL,64064UL},
-/*175*/ {15251717911840629035UL,10418083684603537987UL,43576336890973225UL,15050686127690930710UL,62251909844247UL,8586060728690421723UL,177862599554UL,18313160726588299521UL,635223569UL,15481611692766512054UL,2540894UL,5153227811114902214UL,10889UL,10088737027986275832UL,48UL,16451604670988145730UL,0UL,4187371129541996232UL,0UL,19939862521616034UL,96850760800298UL,477964773016UL,2389808381UL,12072631UL,59308UL},
-/*176*/ {15295232174051664052UL,8616081855638852399UL,43452364130828591UL,1072587964005198536UL,61722108140381UL,9617937021328708298UL,175346898126UL,1547083849883254844UL,622680746UL,3438055658069118456UL,2476571UL,2759723486885446717UL,10553UL,10519067534116741792UL,47UL,2105748524003817473UL,0UL,4012192954491679773UL,0UL,18997125731483166UL,91747482208434UL,450207151009UL,2238231520UL,11242744UL,54929UL},
-/*177*/ {15338622990801035706UL,6979622412349255302UL,43329443476839083UL,16903177125124982991UL,61199778922089UL,1873759895986586367UL,172880731418UL,6102098351751424083UL,610454560UL,1715103969873586737UL,2414227UL,1361628506989467060UL,10229UL,14309812686423039471UL,45UL,7574726678742367535UL,0UL,3845274269047925205UL,0UL,18103927820365673UL,86939766352884UL,424205314029UL,2097047031UL,10474129UL,50895UL},
-/*178*/ {15381891406771633601UL,17195319663799062214UL,43207560131380993UL,4867254265502211692UL,60684775465422UL,13712352344463279518UL,170462852430UL,17759828161666095315UL,598535296UL,8430755486253301131UL,2353790UL,9069986584650843823UL,9917UL,12111506598458712518UL,43UL,14347467648040203073UL,0UL,3686182238984602790UL,0UL,17257407485873181UL,82408968316573UL,399839207124UL,1965489611UL,9761954UL,47178UL},
-/*179*/ {15425038451994210223UL,6869490978189957441UL,43086699586576006UL,3883729878509514884UL,60176954729854UL,13969300304230567725UL,168092052318UL,554292572741134312UL,586913590UL,9148016588825060971UL,2295192UL,14978667610614874394UL,9616UL,13459836482068172083UL,42UL,3916261810026556774UL,0UL,3534508962212202561UL,0UL,16454883436733068UL,78137714630016UL,376997592591UL,1842854160UL,9101791UL,43750UL},
-/*180*/ {15468065142133480720UL,8553901707341485607UL,42966847617037446UL,8222313759724638178UL,59676177245885UL,6314057438739269911UL,165767159016UL,6422658518478981172UL,575580413UL,4633986916060995472UL,2238368UL,5049882915891009286UL,9326UL,9859304684794639743UL,40UL,13116800502848411438UL,0UL,3389869904467355830UL,0UL,15693842150303502UL,74109810141582UL,355577358222UL,1728490744UL,8489583UL,40589UL},
-/*181*/ {15510972478767079966UL,17183958546419743118UL,42847990272837237UL,8812220826586913318UL,59182307006681UL,4929604733497970131UL,163487035930UL,1083732680335355121UL,564527057UL,14195505222040136235UL,2183253UL,15026318000460559220UL,9046UL,11655176115385673268UL,39UL,5000786467005420028UL,0UL,3251902441105594803UL,0UL,14971926524419543UL,70310152174844UL,335482883245UL,1621800009UL,7921609UL,37672UL},
-/*182*/ {15553761449657593641UL,13089729959019828239UL,42730113872685696UL,15087287691897683127UL,58695211363579UL,4683088183041834039UL,161250580669UL,3205571331941603258UL,553745125UL,17051441370741109157UL,2129788UL,17448091305498389397UL,8776UL,11119676772052004768UL,37UL,16409716660547941827UL,0UL,3120264497266966947UL,0UL,14286925353779379UL,66724651366777UL,316625456873UL,1522228992UL,7394453UL,34979UL},
-/*183*/ {15596433029017872352UL,10833402567906979277UL,42613204997316591UL,2348042704804771458UL,58214760925295UL,16408713708592517587UL,159056723839UL,11183440311471047608UL,543226515UL,15599485063243614397UL,2077915UL,11702287322719801825UL,8516UL,879575705465265603UL,36UL,10400770404058043612UL,0UL,2994633279285797677UL,0UL,13636763566868658UL,63340158633982UL,298922744837UL,1429267307UL,6904983UL,32491UL},
-/*184*/ {15638988177769830407UL,10599109275282033214UL,42497250483070191UL,5993917538170431183UL,57740829460693UL,3592225978367712381UL,156904427882UL,5874623050549959922UL,532963409UL,17088205532367635254UL,2027578UL,3503723182613559554UL,8264UL,10791591197340961548UL,35UL,5373868437115937287UL,0UL,2874704090767780126UL,0UL,13019493164703087UL,60144397762536UL,282298299709UL,1342443656UL,6450319UL,30193UL},
-/*185*/ {15681427843796923726UL,15458218388326600196UL,42382237415667361UL,7819325118613558520UL,57273293804955UL,16487996159244090779UL,154792685959UL,6276570284791724440UL,522948263UL,6938733656981594435UL,1978723UL,2927877654620730062UL,8021UL,15691602236928608101UL,34UL,1284556317069708751UL,0UL,2760189227264027076UL,0UL,12433284807490012UL,57125903161052UL,266681111211UL,1261322648UL,6027817UL,28068UL},
-/*186*/ {15723752962190494563UL,10347146981043670465UL,42268153124167996UL,2556804018118900008UL,56812033769043UL,102612607947522993UL,152720520884UL,9669940072530403462UL,513173793UL,5437587443884419702UL,1931299UL,4096599422796675586UL,7787UL,9165508550359159170UL,32UL,16537360807113477065UL,0UL,2650816943936707441UL,0UL,11876419999711247UL,54273962356412UL,252005193050UL,1185501889UL,5635047UL,26103UL},
-/*187*/ {15765964455490164152UL,7416404078628420605UL,42154985175107390UL,14422100731555661745UL,56356932052282UL,11215566724860550930UL,150686984097UL,227279526790638389UL,503632968UL,4402823550767555557UL,1885257UL,1851290996024251033UL,7561UL,3534008389744035420UL,31UL,14198689806212570572UL,0UL,2546330491038003308UL,0UL,11347283828150297UL,51578562847955UL,238209203141UL,1114609322UL,5269772UL,24285UL},
-/*188*/ {15808063233918448116UL,16428331925166538777UL,42042721366804383UL,5342225244377122642UL,55907874157984UL,10187155606162022664UL,148691154675UL,9054223577576381702UL,494318998UL,4727642352472500115UL,1840549UL,8514879715053074014UL,7342UL,11391472267649842407UL,30UL,12677180477115789660UL,0UL,2446487212416630335UL,0UL,10844358211062182UL,49030342968814UL,225236094358UL,1048300797UL,4929937UL,22602UL},
-/*189*/ {15850050195609763430UL,4828134978939153922UL,41931349723835352UL,18264313276577543540UL,55464748311951UL,9686739373631693100UL,146732138391UL,7492165562569293890UL,485225325UL,6795901976667756357UL,1797130UL,15397456735412284677UL,7131UL,8698862132671187837UL,29UL,11936613611973388478UL,0UL,2351057702627033432UL,0UL,10366215620044535UL,46620546433118UL,213032793209UL,986257844UL,4613648UL,21044UL},
-/*190*/ {15891926226833989926UL,11949698713289181551UL,41820858491668394UL,10031523626045938985UL,55027445383774UL,3751092251285943273UL,144809066799UL,7485657051585676032UL,476345614UL,8701875196026485383UL,1754957UL,9721454585228588349UL,6927UL,8557857281089129302UL,28UL,11942554888966646205UL,0UL,2259825018548301870UL,0UL,9911513239243127UL,44340980275047UL,201549904087UL,928185634UL,4319162UL,19601UL},
-/*191*/ {15933692202214743790UL,9423362417341605774UL,41711236131452208UL,16153497076011339910UL,54595858810801UL,5912511846938667453UL,142921096363UL,6534615083240126009UL,467673744UL,11888627290492598079UL,1713987UL,10068555361017781529UL,6730UL,5858469879380962276UL,27UL,12662258156959269864UL,0UL,2172583941725300392UL,0UL,9478987529338965UL,42183975910551UL,190741436921UL,873811114UL,4044873UL,18263UL},
-/*192*/ {15975348984942515101UL,10572788055748124101UL,41602471314954466UL,7569561478198301375UL,54169884524680UL,5438194950698641884UL,141067407616UL,6547383825456243910UL,459203800UL,15393599826481450055UL,1674180UL,9663801704424438399UL,6539UL,14161037656841783291UL,26UL,14064574430307460208UL,0UL,2089140287925722867UL,0UL,9067449166341008UL,40142353075190UL,180564556280UL,822881297UL,3789301UL,17023UL},
-/*193*/ {16016897426982816370UL,11345164258745682974UL,41494552919644601UL,18380556706122314776UL,53749420880368UL,12090655847058867721UL,139247204353UL,5288167108691993641UL,450930065UL,16803184105638199472UL,1635497UL,11960527803371947731UL,6355UL,10345114351268047278UL,25UL,16119866229256084843UL,0UL,2009310260665780091UL,0UL,8675778327569414UL,38209386412150UL,170979350132UL,775161690UL,3551080UL,15873UL},
-/*194*/ {16058338369279484059UL,3407911206996458701UL,41387470023916196UL,531757979427323522UL,53334368587520UL,16070271587380263165UL,137459712854UL,8028668237037590038UL,442847013UL,1143129693372349097UL,1597901UL,10948558936439845525UL,6177UL,8386150575620324831UL,25UL,353182852649547592UL,0UL,1932919845695890540UL,0UL,8302920299378154UL,36378774503310UL,161948616639UL,730434861UL,3328952UL,14806UL},
-/*195*/ {16099672641953270324UL,14192618286937860128UL,41281211902444282UL,16307365588828265682UL,52924630644159UL,6217120913975295883UL,135704181138UL,16050418876670546907UL,434949298UL,9629560765441083039UL,1561356UL,8416011371622948862UL,6005UL,4005514151920606972UL,24UL,3631160708829939793UL,0UL,1859804243657745334UL,0UL,7947881383150140UL,34644611153353UL,153437667480UL,688499117UL,3121755UL,13816UL},
-/*196*/ {16140901064495857664UL,0UL,41175768021673106UL,5270498306774157605UL,52520112272542UL,4194886407432492787UL,133979878246UL,5187083506417048904UL,427231754UL,11286936377644027864UL,1525827UL,12821268880990346561UL,5838UL,11554747013631303196UL,23UL,7481487304181015795UL,0UL,1789807338327010688UL,0UL,7609725077918533UL,33001358752594UL,145414146359UL,649167290UL,2928417UL,12896UL},
-/*197*/ {16182024445959424732UL,1941537729814794859UL,41071128035430012UL,192204350316378176UL,52120720857144UL,12641413710854662755UL,132286093546UL,968467754276765723UL,419689383UL,1431056545535500713UL,1491282UL,1325384929041520434UL,5677UL,8666588149821901764UL,22UL,11879810088537946274UL,0UL,1722781198043122361UL,0UL,7287568519638699UL,31443823558469UL,137847861456UL,612265627UL,2747946UL,12042UL},
-/*198*/ {16223043585141887389UL,10299565583376181452UL,40967281780661331UL,14606390052157742013UL,51726365884673UL,7355215622816498107UL,130622136072UL,7518386392651652294UL,412317348UL,13160050029739666971UL,1457687UL,11002773424692227446UL,5521UL,10033663545322568511UL,21UL,16802928795336546837UL,0UL,1658585608100403896UL,0UL,6980579158669635UL,29967132748683UL,130710630676UL,577632767UL,2579427UL,11248UL},
-/*199*/ {16263959270767934959UL,9582736110687147980UL,40864219273286268UL,13696915170489961997UL,51336958886038UL,480693211865177129UL,128987333884UL,9549020031145811080UL,405110973UL,4711199564029138132UL,1425013UL,8739379181059744730UL,5370UL,12060399889194015656UL,21UL,3781991405726245658UL,0UL,1597087632034279470UL,0UL,6687971658433055UL,28566713110952UL,123976138668UL,545118800UL,2422015UL,10510UL},
-/*200*/ {16304772281665977765UL,8060577056655502919UL,40761930704164944UL,7629433373046828799UL,50952413380206UL,3329950724984027827UL,127381033450UL,9508398074772879152UL,398065729UL,9829546533141864542UL,1393230UL,984410732662038422UL,5224UL,11302322285394582938UL,20UL,9689413881803615413UL,0UL,1538161199883727394UL,0UL,6409004999513716UL,27238271245182UL,117619804672UL,514584401UL,2274928UL,9824UL},
-/*201*/ {16345483386941118250UL,9878634259372415911UL,40660406435176911UL,1309421562993133983UL,50572644819871UL,14387335765894131837UL,125802599054UL,7515439352687937923UL,391177235UL,15969248419912758976UL,1362308UL,14418377718554645557UL,5083UL,4458992531477484818UL,19UL,16058362354731174260UL,0UL,1481686721647314034UL,0UL,6142979774655501UL,25977775163894UL,111618660304UL,485900040UL,2137440UL,9186UL},
-/*202*/ {16386093346144254353UL,12889088922541998092UL,40559636995406570UL,3365102490849849668UL,50197570538869UL,9547158570917626764UL,124251412224UL,17054907668476684108UL,384441250UL,12837641027782847295UL,1332222UL,2875422846556653917UL,4946UL,6814054458545936007UL,19UL,4422934973381981034UL,0UL,1427550724276058970UL,0UL,5889235661203292UL,24781437185849UL,105951236515UL,458945244UL,2008883UL,8592UL},
-/*203*/ {16426602909437420323UL,9986916680003006788UL,40459613077432069UL,14064115358266636591UL,49827109701271UL,403520646073065288UL,122726871185UL,7316082060377612994UL,377853667UL,8166807827063815623UL,1302943UL,12559225483958087866UL,4813UL,15335389702042367555UL,18UL,11658346568065247751UL,0UL,1375645510662832833UL,0UL,5647149058548754UL,23645698026188UL,100597458973UL,433607927UL,1888636UL,8040UL},
-/*204*/ {16467012817755466788UL,11862201994645213283UL,40360325533714379UL,7082240876209155062UL,49461183252100UL,17618990042029350323UL,121228390323UL,14330367934642763875UL,371410509UL,10521926223040421670UL,1274447UL,15254668509614930541UL,4685UL,8669085168642382248UL,18UL,853675222064488316UL,0UL,1325868839195732633UL,0UL,5416130879066172UL,22567211994043UL,95538551215UL,409783767UL,1776126UL,7525UL},
-/*205*/ {16507323802964178661UL,11252677923066272381UL,40261765373083362UL,10870531706553824907UL,49099713869613UL,15805469355427632999UL,119755399681UL,18170349587952138864UL,365107925UL,15858858031403463850UL,1246709UL,18275935978283739635UL,4561UL,2473938321733869758UL,17UL,8885772434610439986UL,0UL,1278123622542605076UL,0UL,5195624481879239UL,21542833215623UL,90756944945UL,387375634UL,1670819UL,7045UL},
-/*206*/ {16547536588014926332UL,13597308397669189175UL,40163923757317782UL,6659503474045346671UL,48742625919074UL,18051863139422262074UL,118307344463UL,14281836113055970087UL,358942185UL,16105877989283062147UL,1219706UL,8427401385846316592UL,4440UL,12522530821950811546UL,16UL,17292014515174205801UL,0UL,1232317644426228628UL,0UL,4985103739587120UL,20569602807182UL,86236196941UL,366293062UL,1572224UL,6598UL},
-/*207*/ {16587651887095942600UL,12350438910716913375UL,40066791997816286UL,8763073133714466256UL,48389845407990UL,12620314273977440436UL,116883684560UL,6714086776160411070UL,352909675UL,11159610209897556564UL,1193414UL,6676783384726038085UL,4323UL,17802575025331401290UL,16UL,7610496912568828006UL,0UL,1188363293235199204UL,0UL,4784071228804046UL,19644736928199UL,81960912031UL,346451766UL,1479883UL,6182UL},
-/*208*/ {16627670405780314887UL,17795524897262420727UL,39970361552356526UL,3191140274352501407UL,48041299942736UL,3861688232091123176UL,115483894093UL,2137753374447475002UL,347006893UL,5693430574931032063UL,1167811UL,12178048143788611767UL,4210UL,15852238784839274164UL,15UL,16720230611431783063UL,0UL,1146177311394823954UL,0UL,4592056536035926UL,18765615650510UL,77916671686UL,327773188UL,1393371UL,5793UL},
-/*209*/ {16667592841170779494UL,7026991692827658487UL,39874624021939663UL,15903958990976713493UL,47696918686530UL,12883200662635939361UL,114107460972UL,10357467258159500042UL,341230445UL,9077821457375974775UL,1142877UL,1663249953989425292UL,4101UL,4308737851956137332UL,15UL,7713899736968858366UL,0UL,1105680559495800299UL,0UL,4408614671034926UL,17929772584093UL,74089967780UL,310184085UL,1312296UL,5431UL},
-/*210*/ {16707419882041401945UL,15294517860137845307UL,39779571147717623UL,12553848997303238228UL,47356632318711UL,8425781939557216080UL,112753886473UL,2260023165949391306UL,335577043UL,1379251860144905302UL,1118590UL,2648630823432185410UL,3994UL,17797391181160753971UL,14UL,17471782096416008180UL,0UL,1066797794246590795UL,0UL,4233324580342718UL,17134885204791UL,70468141147UL,293616147UL,1236292UL,5093UL},
-/*211*/ {16747152208976224898UL,3117052354290544795UL,39685194808000532UL,17230175870606288819UL,47020372995261UL,5440785196860870959UL,111422684822UL,16492567063946355048UL,330043497UL,12878519181193569533UL,1094931UL,645959703959390539UL,3891UL,17246941887759140248UL,14UL,9087766265157634471UL,0UL,1029457459378609686UL,0UL,4065787754259075UL,16378765833425UL,67039324529UL,278005643UL,1165020UL,4777UL},
-/*212*/ {16786790494504962548UL,9981867008518928025UL,39591487015341892UL,14815742575636241692UL,46688074310544UL,12634348237414122853UL,110113382807UL,16388231414981616817UL,324626718UL,3387436077655507329UL,1071880UL,12419230708327079785UL,3792UL,566013620158031194UL,14UL,996531402161477839UL,0UL,993591488691991848UL,0UL,3905626920958306UL,15659353219639UL,63792389622UL,263293095UL,1098165UL,4482UL},
-/*213*/ {16826335403235818089UL,130615569384516581UL,39498439913699103UL,9137074213901642975UL,46359671260210UL,3972877041904635667UL,108825519390UL,3040481131928575701UL,319323707UL,2412194595084016042UL,1049420UL,11690865313427123583UL,3695UL,2639297986837356268UL,13UL,11633287857932749179UL,0UL,959135120484166309UL,0UL,3752484821924804UL,14974704687326UL,60716897876UL,249422974UL,1035435UL,4207UL},
-/*214*/ {16865787591985498404UL,7205812839140625725UL,39406045775667052UL,6395616672308771647UL,46035100205218UL,9575642506307651506UL,107558645339UL,5452956532228297091UL,314131557UL,11986914397518956384UL,1027533UL,2444182241751213825UL,3601UL,3090206716431915304UL,13UL,4093519223881903691UL,0UL,926026722654023908UL,0UL,3606023063293804UL,14322988801769UL,57803054793UL,236343423UL,976556UL,3950UL},
-/*215*/ {16905147709906497965UL,16888924040440889UL,39314296999782553UL,7507435120519097613UL,45714298836956UL,8438462623358573119UL,106312322876UL,11859860062714406556UL,309047450UL,4109919795536745143UL,1006201UL,13381134218026608UL,3510UL,64395785609049667UL,12UL,15260166477467934472UL,0UL,894207627821445395UL,0UL,3465921038066980UL,13702478521624UL,55041667434UL,224005998UL,921277UL,3709UL},
-/*216*/ {16944416398611721692UL,2707454086302665559UL,39223186107897503UL,16915782655729826633UL,45397206143399UL,16395333897211754533UL,105086125331UL,17417176323835646440UL,304068649UL,12679157477324987149UL,985407UL,12193736536680540209UL,3421UL,10226479320335066807UL,12UL,8229652302749872111UL,0UL,863621977845612677UL,0UL,3331874914527231UL,13111544801634UL,52424104921UL,212365429UL,869363UL,3485UL},
-/*217*/ {16983594292296514476UL,17302528048163460754UL,39132705742618696UL,17551523240591010891UL,45083762376288UL,15151651271568884518UL,103879636811UL,13381173480222046295UL,299192502UL,6233500957588582271UL,965137UL,1924288101020303977UL,3335UL,13416668634578096731UL,12UL,1439067724772826238UL,0UL,834216577166110563UL,0UL,3203596686505243UL,12548650614498UL,49942261690UL,201379398UL,820593UL,3275UL},
-/*218*/ {17022682017858163007UL,15965734251645564427UL,39042848664812300UL,8794591186948446672UL,44773909019280UL,2971718763195281735UL,102692451879UL,1529941526185181514UL,294416433UL,2574660847214648480UL,945373UL,16009548472162965430UL,3252UL,7988024854423819650UL,11UL,13325919146644716682UL,0UL,805940754428568330UL,0UL,3080813281454250UL,12012345362678UL,47588523308UL,191008336UL,774765UL,3078UL},
-/*219*/ {17061680195012933607UL,4394970065239831530UL,38953607751171081UL,5442979350625050205UL,44467588757044UL,11314320259055541402UL,101524175244UL,7269758677938580866UL,289737943UL,905179963231332899UL,926103UL,264011564396171426UL,3171UL,10803620712906607850UL,11UL,6987876462158024971UL,0UL,778746231891700740UL,0UL,2963265722570671UL,11501259653073UL,45355734651UL,181215231UL,731689UL,2894UL},
-/*220*/ {17100589436410707888UL,560680762910641921UL,38864975991842517UL,17106436960991835685UL,44164745445275UL,10856901276214579569UL,100374421466UL,9876913087722634567UL,285154606UL,8098509944428959044UL,907310UL,2054909834294870090UL,3093UL,1893604200155391182UL,11UL,863218846994212648UL,0UL,752587002145281216UL,0UL,2850708341458941UL,11014100409489UL,43237170279UL,171965453UL,691188UL,2722UL},
-/*221*/ {17139410347747276218UL,8863396807276926643UL,38776946488116009UL,10036384557686808404UL,43865324081579UL,3621406232250496876UL,99242814664UL,3806052300768822837UL,280664068UL,11446075659666013962UL,888981UL,3925929985505119070UL,3016UL,16686341973812722945UL,10UL,13390584845031188478UL,0UL,727419211698995034UL,0UL,2742908038080247UL,10549646299660UL,41226506845UL,163226591UL,653097UL,2560UL},
-/*222*/ {17178143527874347219UL,7543837818296347993UL,38689512450167448UL,12771833937943983545UL,43569270777215UL,10982717009973634276UL,98128988236UL,17931372551303581939UL,276264043UL,8484466807775154179UL,871102UL,15490442337309865600UL,2942UL,16878754534590840531UL,10UL,7668723359837884239UL,0UL,703201051030442998UL,0UL,2639643584948709UL,10106743455277UL,39317797387UL,154968300UL,617263UL,2409UL},
-/*223*/ {17216789568907329816UL,5912956103616977089UL,38602667194859483UL,16474702012197350942UL,43276532729663UL,1817647350252161818UL,97032584595UL,12122676369836660954UL,271952311UL,1595331691131908968UL,853661UL,17765168990175933039UL,2871UL,1114438850593850805UL,10UL,2136942164627059674UL,0UL,679892650706948668UL,0UL,2540704972746069UL,9684301465054UL,37505447373UL,147162165UL,583544UL,2268UL},
-/*224*/ {17255349056330942722UL,12314178008380155705UL,38516404143595854UL,5380336847300495236UL,42987058195977UL,9517607253237849712UL,95953254901UL,13568072338177857883UL,267726715UL,12647936301330965412UL,836645UL,18198038498499499137UL,2801UL,4981435211062590760UL,9UL,15234860556762850239UL,0UL,657455983220405690UL,0UL,2445892794718419UL,9281289622282UL,35784192365UL,139781566UL,551805UL,2135UL},
-/*225*/ {17293822569102704640UL,0UL,38430716820228232UL,9838263505978427529UL,42700796466920UL,4766092098451771558UL,94890658815UL,6979361299175723436UL,263585163UL,6936916142361014421UL,820042UL,13475406861312845021UL,2733UL,8776376884426897235UL,9UL,10062162775870843689UL,0UL,635854770197316095UL,0UL,2355017667397137UL,8896733409666UL,34149077192UL,132801559UL,521922UL,2011UL},
-/*226*/ {17332210679754356923UL,795556628142071765UL,38345598849014063UL,18244447251275025761UL,42417697841829UL,13222663565200613851UL,93844464251UL,15415144202109959232UL,259525620UL,3052469702851143541UL,803840UL,7681994122657936513UL,2667UL,11289434414884564481UL,9UL,5059048807214808468UL,0UL,615054394667535818UL,0UL,2267899685351961UL,8529711205500UL,32595436520UL,126198763UL,493780UL,1894UL},
-/*227*/ {17370513954491268971UL,572084262530268536UL,38261043952623940UL,8574526616333140219UL,42137713604211UL,7160604009429620384UL,92814347145UL,15496409903288036974UL,255546109UL,18133883945370678201UL,788027UL,12025987316384037125UL,2603UL,11355632611239396863UL,9UL,219245130587989086UL,0UL,595021818095170952UL,0UL,2184367907838076UL,8179351196310UL,31118876722UL,119951258UL,467269UL,1785UL},
-/*228*/ {17408732953289875168UL,18092031138254189870UL,38177045950197094UL,12337504889355170792UL,41860795998023UL,2400277747354256866UL,91799991223UL,13557148119386083439UL,251644712UL,14468908735625252507UL,772593UL,7682021388917190127UL,2541UL,7853000022688978110UL,8UL,13983480557098416595UL,0UL,575725501893660173UL,0UL,2104259875342053UL,7844828482222UL,29715258955UL,114038486UL,442289UL,1682UL},
-/*229*/ {17446868229993190812UL,3462882382678320843UL,38093598755443648UL,1135309424555776782UL,41586898204632UL,14823077453793434243UL,90801087783UL,757346006071103413UL,247819562UL,13404150159463847553UL,757527UL,878729447503074366UL,2480UL,18147546505190846310UL,8UL,9452498234513751533UL,0UL,557135333164430047UL,0UL,2027421154164337UL,7525362362231UL,28380683360UL,108441159UL,418745UL,1586UL},
-/*230*/ {17484920332404453102UL,5650364115193033481UL,38010696374792289UL,6508745443600305207UL,41315974320426UL,7405823161567853099UL,89817335479UL,3464838725001281070UL,244068846UL,7578595635475933628UL,742818UL,4209674163445529337UL,2422UL,4304600276374109375UL,8UL,5067508967717993666UL,0UL,539222554414708387UL,0UL,1953704907299428UL,7220213787482UL,27111474302UL,103141181UL,396549UL,1496UL},
-/*231*/ {17522889802378932002UL,5074836298827778391UL,37928332905582103UL,16621039763987015694UL,41047979335045UL,10459164708132123930UL,88848440119UL,2697816055512277234UL,240390801UL,3471054801869467422UL,728456UL,17954169401401925866UL,2365UL,2214405701477096693UL,8UL,823204349182657337UL,0UL,521959697025207662UL,0UL,1882971489989701UL,6928682971482UL,25904166583UL,98121564UL,375618UL,1411UL},
-/*232*/ {17560777175913954478UL,8059612955311644645UL,37846502534297315UL,12659750492230493661UL,40782869110234UL,3253748959597939016UL,87894114461UL,13126463994146012871UL,236783713UL,9745744224129828660UL,714433UL,11407547835796240155UL,2309UL,10910120314468225697UL,7UL,15161234849676011799UL,0UL,505320518252520737UL,0UL,1815088068435567UL,6650107146964UL,24755492558UL,93366359UL,355875UL,1331UL},
-/*233*/ {17598582983237184439UL,17554740499626106751UL,37765199534843743UL,7994313947028424853UL,40520600359274UL,7430819036038744937UL,86954078024UL,3578621857660726160UL,233245917UL,8243339151617301811UL,700738UL,14900916518695952187UL,2255UL,11013089019733025155UL,7UL,11183223957234392829UL,0UL,489279941564274665UL,0UL,1749928260243988UL,6383858459816UL,23662370086UL,88860586UL,337248UL,1256UL},
-/*234*/ {17636307748893199506UL,9590289125558334262UL,37684418266865810UL,16811759112234673766UL,40261130626993UL,7152278967729799529UL,86028056895UL,5257626582844231121UL,229775792UL,18253852250721474998UL,687363UL,8915349275472045444UL,2203UL,1624927689953942105UL,7UL,7331223517852753332UL,0UL,473814000117429129UL,0UL,1687371795289803UL,6129341991154UL,22621891269UL,84590174UL,319670UL,1186UL},
-/*235*/ {17673951991828404594UL,1956311896720758776UL,37604153174102988UL,9188286010946289015UL,40004418270322UL,6054027085865412965UL,85115783553UL,16183218266923831231UL,226371764UL,14221521956300490022UL,674298UL,16118503198575006441UL,2152UL,326180773008147591UL,7UL,3600728779278000507UL,0UL,458899783201644385UL,0UL,1627304195750336UL,5885993899256UL,21631311914UL,80541901UL,303077UL,1119UL},
-/*236*/ {17711516225474321203UL,7541295920111562442UL,37524398782784578UL,15140744178910398385UL,39750422439390UL,8184194668421083659UL,84216996693UL,11507472356650485718UL,223032300UL,10436080402692756832UL,661536UL,8941669833410058533UL,2102UL,6281549907931447761UL,6UL,18434158294213482768UL,0UL,444515385480434323UL,0UL,1569616474153910UL,5653279673609UL,20688041677UL,76703340UL,287410UL,1057UL},
-/*237*/ {17749000957829290225UL,17773820128866818647UL,37445149700061793UL,13386090796226251103UL,39499103059136UL,16845801386661380168UL,83331441053UL,580380207634166884UL,219755909UL,17523991549466810809UL,649068UL,1631796197387893102UL,2054UL,238667001557677524UL,6UL,14933869776672992770UL,0UL,430639858872914993UL,0UL,1514204848357492UL,5430692493873UL,19789634839UL,73062805UL,272615UL,999UL},
-/*238*/ {17786406691538625046UL,13268366104102046281UL,37366400612476103UL,725440671073264654UL,39250420811424UL,8817220582152226103UL,82458867250UL,16450077117300424604UL,216541142UL,18276797653523045307UL,636885UL,13183496657327160400UL,2006UL,18313897217941269590UL,6UL,11542617070309412947UL,0UL,417253166928405234UL,0UL,1460970472438247UL,5217751687057UL,18933781665UL,69609310UL,258639UL,944UL},
-/*239*/ {17823733923973250718UL,9346284771152543891UL,37288146284462867UL,11288275218188999196UL,39004337117638UL,18130524017187717538UL,81599031626UL,15860451033970928619UL,213386588UL,18121600758002905006UL,624981UL,11831206134638826820UL,1961UL,4417264145539732942UL,6UL,8256566735145462240UL,0UL,404336141554977977UL,0UL,1409819182548600UL,5014001276638UL,18118300317UL,66332519UL,245433UL,892UL},
-/*240*/ {17860983147306864011UL,15510463654044911605UL,37210381556889300UL,455051350968437457UL,38760814121759UL,12682610562499242192UL,80751696086UL,18434735462227863471UL,210290875UL,4179309181774086725UL,613348UL,7121872263522397437UL,1916UL,13165561003341563013UL,6UL,5072035340046043572UL,0UL,391870441971339416UL,0UL,1360661256844799UL,4819008617795UL,17341129283UL,63222707UL,232952UL,843UL},
-/*241*/ {17898154848591648201UL,16176162740749787886UL,37133101345625826UL,2674276978893586824UL,38519814673885UL,13129814016124114103UL,79916627954UL,2208701714144333104UL,207252665UL,15792619932671930411UL,601978UL,12866740524063154551UL,1873UL,6967138564579924423UL,6UL,1985483001384738628UL,0UL,379838515759166599UL,0UL,1313411188655364UL,4632363113330UL,16600320274UL,60270721UL,221155UL,797UL},
-/*242*/ {17935249509832575541UL,18090006799175829019UL,37056300640149949UL,8612825254925258146UL,38281302314204UL,9098873707039650185UL,79093599822UL,13587065627990991788UL,204270660UL,12898264373785046302UL,590865UL,10099169433021943577UL,1831UL,3594874638515239647UL,5UL,17440251298986995955UL,0UL,368223561900297415UL,0UL,1267987472108347UL,4453675005165UL,15894031573UL,57467947UL,209999UL,754UL},
-/*243*/ {17972267608060329489UL,4976857535075557757UL,36979974502181747UL,16976690243792685453UL,38045241257388UL,11613104237942725023UL,78282389418UL,9133398522486080479UL,201343594UL,3382620573408236458UL,580002UL,2271937480649919356UL,1790UL,2398256754865589771UL,5UL,14539581111653474356UL,0UL,357009495689973205UL,0UL,1224312399485396UL,4282574236719UL,15220521801UL,54806272UL,199450UL,713UL},
-/*244*/ {18009209615402877890UL,11701949803032804271UL,36904118064350159UL,11288589515919014725UL,37811596377407UL,17532192977299870249UL,77482779461UL,16630436150278264405UL,198470234UL,5117343108777367080UL,569381UL,15119842647964395777UL,1750UL,2749225338611023632UL,5UL,11727071463312192099UL,0UL,346180915423713925UL,0UL,1182311869616407UL,4118709381706UL,14578144067UL,52278054UL,189470UL,675UL},
-/*245*/ {18046075999155727507UL,3830637300661882670UL,36828726528889239UL,14953444968496640560UL,37580333192744UL,2255220397693809472UL,76694557536UL,3919829804211198321UL,195649381UL,8668675355527471162UL,558998UL,4293871272360003291UL,1711UL,4041311066929514339UL,5UL,8999697891809004477UL,0UL,335723070761387177UL,0UL,1141915206671289UL,3961746635244UL,13965340486UL,49876097UL,180027UL,638UL},
-/*246*/ {18082867221850889450UL,2250945240292675374UL,36753795166363596UL,8178132425424745788UL,37351417851995UL,9681603734206863191UL,75917515959UL,6281072894397768258UL,192879867UL,14441536836336884542UL,548845UL,2808105415062269405UL,1673UL,5688808709938192017UL,5UL,6354551432929070738UL,0UL,325621832677641922UL,0UL,1103054988745309UL,3811368863413UL,13380637029UL,47593617UL,171091UL,604UL},
-/*247*/ {18119583741324584319UL,14183079625609595301UL,36679319314422235UL,8579934154868617238UL,37124817119860UL,10370974590145414741UL,75151451659UL,11746252254524179397UL,190160555UL,15106388127689041881UL,538916UL,10237064930164923582UL,1636UL,7125985772064903220UL,5UL,3788833765046748794UL,0UL,315863664913139785UL,0UL,1065666885671776UL,3667274707648UL,12822638697UL,45424222UL,162631UL,572UL},
-/*248*/ {18156226010783715083UL,15617014587789905349UL,36605294376580070UL,13531824825291042625UL,36900498363487UL,17976901814545078532UL,74396166055UL,7734784123129883595UL,187490337UL,15518848937242677400UL,529206UL,11044905817571421605UL,1600UL,7806324334942849634UL,5UL,1299852576432794841UL,0UL,306435596845954394UL,0UL,1029689505530680UL,3529177740608UL,12290024991UL,43361883UL,154622UL,542UL},
-/*249*/ {18192794478871134995UL,7620897419213095314UL,36531715821026375UL,9090508424654725384UL,36678429539183UL,1990855546497567016UL,73651464938UL,2189455333123215085UL,184868134UL,16322344545452733947UL,519709UL,11365815805801752613UL,1565UL,7201794582272090091UL,4UL,17331761217874049422UL,0UL,297325197707143369UL,0UL,995064249354487UL,3396805670372UL,11781545647UL,41400920UL,147037UL,513UL},
-/*250*/ {18229289589729737140UL,3340365934211727143UL,36458579179459474UL,5171769072507097907UL,36458579179459UL,8748928460010834564UL,72917158358UL,16951608916585390053UL,182292895UL,16552214968261512171UL,510420UL,2001701073724344705UL,1531UL,4802158562385656451UL,4UL,14988578187884308092UL,0UL,288520552068848138UL,0UL,961735173562755UL,3269899590004UL,11296016648UL,39535969UL,139852UL,486UL},
-/*251*/ {18265711783065391511UL,12063159118716609369UL,36385880045946995UL,795706742363779270UL,36240916380425UL,5420901602078368034UL,72193060518UL,14305187940787039734UL,179763596UL,16773652212152758089UL,501332UL,13657683501990103147UL,1498UL,114302815538653898UL,4UL,12714647546242304829UL,0UL,280010236537362181UL,0UL,929648859685730UL,3148213269749UL,10832316463UL,37761975UL,133045UL,461UL},
-/*252*/ {18302061494208754842UL,12501700421524245584UL,36313614075811021UL,9467781094124183656UL,36025410789495UL,1125713461895244873UL,71478989661UL,12849073181218150520UL,177279240UL,4286697103264400920UL,492442UL,6160822183190029430UL,1465UL,11108342634144403140UL,4UL,10507658772283395772UL,0UL,271783297587445612UL,0UL,898754290963711UL,3031512489265UL,10389382524UL,36074166UL,126594UL,437UL},
-/*253*/ {18338339154175977771UL,16248650814870867764UL,36241776984537505UL,8818011803515558908UL,35812032593416UL,9359681543099323654UL,70774767971UL,3299538830389246974UL,174838853UL,12612818551428980296UL,483743UL,15937011286411278631UL,1434UL,430032272141437171UL,4UL,8365387164701043385UL,0UL,263829230477769301UL,0UL,869002735433962UL,2919574407493UL,9966207903UL,34468036UL,120480UL,414UL},
-/*254*/ {18374545189728333292UL,11556360322123820026UL,36170364546709317UL,9318745754314505972UL,35600752506603UL,12155699341600398166UL,70080221469UL,12769611947270970503UL,172441489UL,15436994464971192886UL,475232UL,8343577731301108601UL,1403UL,4527385101844362327UL,4UL,6285690332180859352UL,0UL,256137959190759780UL,0UL,840347635140231UL,2812186967902UL,9561838201UL,32939333UL,114684UL,393UL},
-/*255*/ {18410680023430789819UL,15898606764561736782UL,36099372594962332UL,18080046861854172536UL,35391541759766UL,18319789264172470988UL,69395179921UL,2061445994886092866UL,170086225UL,5475778134592504506UL,466903UL,6706497535342542265UL,1373UL,4522900751921280370UL,4UL,4266504840597785723UL,0UL,248699817343300930UL,0UL,812744501121844UL,2709148336991UL,9175368611UL,31484041UL,109187UL,372UL},
+static const mp_limb_t V[192][9] = {
+/*64*/ {18446744073709551615UL,4899916394579099648UL,18446744073709545581UL,216172782113656827UL,2814749766088467UL,38482902961355UL,541157289571UL,7740859288UL,106097935UL},
+/*65*/ {18161848009772339989UL,1152921504606846976UL,18022691487252618265UL,207954132545111171UL,2666078621481441UL,35889516397918UL,496924278946UL,6999053007UL,94535144UL},
+/*66*/ {17883451634243709493UL,15564440312192434176UL,17614640343250061338UL,200166367536834629UL,2527353124681123UL,33506572433969UL,456901224663UL,6338067531UL,84379904UL},
+/*67*/ {17611311504979443698UL,11240984669916758016UL,17221757888329068289UL,192780871884194396UL,2397772037670121UL,31314184344002UL,420632500590UL,5748067474UL,75443438UL},
+/*68*/ {17345196756709786252UL,6052837899185946624UL,16843266273138508320UL,185771319188951581UL,2276609303176843UL,29294602608218UL,387717566591UL,5220536111UL,67564560UL},
+/*69*/ {17084888277784556246UL,1441151880758558720UL,16478438191997264216UL,179113458608598653UL,2163206021304308UL,27431958297051UL,357803629953UL,4748082719UL,60605319UL},
+/*70*/ {16830177951838183974UL,12393906174523604992UL,16126592925964676294UL,172784924206704820UL,2056963382936107UL,25712040410991UL,330579372350UL,4324280312UL,54447381UL},
+/*71*/ {16580867958409902162UL,1441151880758558720UL,15787092746870737218UL,166765064227454943UL,1957336434171347UL,24122102278300UL,305769575214UL,3943528643UL,48989016UL},
+/*72*/ {16336770127177867616UL,12105675798371893248UL,15459339644838850759UL,161034787967024404UL,1863828564057104UL,22650692876300UL,283130504507UL,3600938245UL,44142578UL},
+/*73*/ {16097705341016668929UL,3458764513820540928UL,15142772346181354964UL,155576428214150208UL,1775986623114507UL,21287509577542UL,262445938931UL,3292232046UL,39832399UL},
+/*74*/ {15863502983574883288UL,9223372036854775808UL,14836863592339213322UL,150373617489887201UL,1693396593056225UL,20023269352926UL,243523744638UL,3013661709UL,35993019UL},
+/*75*/ {15634000427501147267UL,2882303761517117440UL,14541117653849896608UL,145411176538465701UL,1615679739049908UL,18849595908266UL,226192915139UL,2761936326UL,32567697UL},
+/*76*/ {15409042559830551656UL,16429131440647569408UL,14255068056227410490UL,140675013712740755UL,1542489185208541UL,17758920603794UL,210301008110UL,2534161504UL,29507154UL},
+/*77*/ {15188481341384057465UL,11817445422220181504UL,13978275497181758352UL,136152034063432051UL,1473506861945082UL,16744395319954UL,195711921547UL,2327787232UL,26768514UL},
+/*78*/ {14972175397337247242UL,16429131440647569408UL,13710325936839711216UL,131830057084973340UL,1408440780631120UL,15799815697494UL,182303960675UL,2140563155UL,24314402UL},
+/*79*/ {14759989636385569376UL,16717361816799281152UL,13450828844595491028UL,127697742195505367UL,1347022596827274UL,14919553403629UL,169968154499UL,1970500133UL,22112181UL},
+/*80*/ {14551794896175207254UL,3746994889972252672UL,13199415587953902631UL,123744521137048554UL,1289005428356513UL,14098496265585UL,158606787110UL,1815837137UL,20133302UL},
+/*81*/ {14347467612885206812UL,6341068275337658368UL,12955737950259656825UL,119960536576460942UL,1234161898795762UL,13331995273766UL,148132114111UL,1675012683UL,18352749UL},
+/*82*/ {14146889513040485373UL,17870283321406128128UL,12719466765560989300UL,116336586270359250UL,1182282380671007UL,12615817593715UL,138465238901UL,1546640138UL,16748569UL},
+/*83*/ {13949947325809406394UL,12393906174523604992UL,12490290660055501212UL,112864072229403052UL,1133173415844740UL,11946104842791UL,129535127283UL,1429486335UL,15301462UL},
+/*84*/ {13756532514195999480UL,6052837899185946624UL,12267914890630685525UL,109534954380618353UL,1086656293356284UL,11319335987220UL,121277741950UL,1322453016UL,13994435UL},
+/*85*/ {13566541023677613236UL,9223372036854775808UL,12052060271957520336UL,106341708281966568UL,1042565767377762UL,10732294300540UL,113635281073UL,1224560707UL,12812505UL},
+/*86*/ {13379873046965548176UL,3458764513820540928UL,11842462184437245937UL,103277286492174819UL,1000748900034183UL,10182037897687UL,106555507420UL,1134934679UL,11742440UL},
+/*87*/ {13196432803680555632UL,10376293541461622784UL,11638869656051533249UL,100335083241814072UL,961064015650201UL,9665873421891UL,99991156365UL,1052792710UL,10772537UL},
+/*88*/ {13016128333838351200UL,1152921504606846976UL,11441044511835600614UL,97508902089499343UL,923379754566422UL,9181332515670UL,93899412725UL,977434385UL,9892434UL},
+/*89*/ {12838871304133663343UL,16140901064495857664UL,11248760585291942085UL,94792926280542242UL,887574216047244UL,8726150753968UL,88241447762UL,908231749UL,9092939UL},
+/*90*/ {12664576826095866436UL,9799832789158199296UL,11061802986597481635UL,92181691554971888UL,853534181007505UL,8298248757746UL,82982008866UL,844621112UL,8365887UL},
+/*91*/ {12493163285265858418UL,10952754293765046272UL,10879967422936407616UL,89670061178040826UL,821154406340355UL,7895715241317UL,78089055398UL,786095852UL,7704022UL},
+/*92*/ {12324552180613356396UL,14699749183737298944UL,10703059566721011201UL,87253202989567544UL,790336983553782UL,7516791776919UL,73533435097UL,732200104UL,7100879UL},
+/*93*/ {12158667973476925828UL,3170534137668829184UL,10530894467849110262UL,84926568289100328UL,760990755235443UL,7159859086292UL,69288596134UL,682523195UL,6550696UL},
+/*94*/ {11995437945366476098UL,3170534137668829184UL,10363296006493966647UL,82685872392234163UL,733030783579603UL,6823424691896UL,65330330557UL,636694743UL,6048328UL},
+/*95*/ {11834792064020221342UL,17582052945254416384UL,10200096383235291729UL,80527076709747792UL,706377865838868UL,6506111780239UL,61636545434UL,594380334UL,5589180UL},
+/*96*/ {11676662857155731392UL,4323455642275676160UL,10041135643621760806UL,78446372215790878UL,680958092117911UL,6206649147189UL,58187058433UL,555277704UL,5169136UL},
+/*97*/ {11520985293398139352UL,17582052945254416384UL,9886261234509753542UL,76440164184349983UL,656702441416028UL,5923862110246UL,54963415020UL,519113352UL,4784512UL},
+/*98*/ {11367696669908236297UL,17005592192950992896UL,9735327589752746909UL,74505058084838983UL,633546412258284UL,5656664286034UL,51948724801UL,485639546UL,4432003UL},
+/*99*/ {11216736506269433213UL,288230376151711744UL,9588195743023510096UL,72637846538053712UL,611429684638275UL,5404050142868UL,49127514817UL,454631670UL,4108641UL},
+/*100*/ {11068046444225730969UL,10664523917613334528UL,9444732965739290288UL,70835497243041754UL,590295810335281UL,5165088248451UL,46485597908UL,425885859UL,3811758UL},
+/*101*/ {10921570152893201920UL,288230376151711744UL,9304812428230575250UL,69095141793788714UL,570091928970146UL,4938915141671UL,44009954451UL,399216903UL,3538955UL},
+/*102*/ {10777253239095312990UL,1729382256910270464UL,9168312882448584857UL,67414065312119475UL,550768507432166UL,4724729765376UL,41688626009UL,374456377UL,3288069UL},
+/*103*/ {10635043162497944398UL,6052837899185946624UL,9035118364646988945UL,65789696829951527UL,532279100547729UL,4521788403899UL,39510619581UL,351450977UL,3057151UL},
+/*104*/ {10494889155243391163UL,17005592192950992896UL,8905117916600905371UL,64219600360100586UL,514580131073758UL,4329400075241UL,37465821313UL,330061033UL,2844440UL},
+/*105*/ {10356742145804166038UL,10664523917613334528UL,8778205324042275765UL,62701466600300035UL,497630687288483UL,4146922333201UL,35544918653UL,310159182UL,2648349UL},
+/*106*/ {10220554686797223244UL,6052837899185946624UL,8654278871096384779UL,61233105220019805UL,481392336621084UL,3973757439516UL,33739330057UL,291629178UL,2467437UL},
+/*107*/ {10086280886517446449UL,12393906174523604992UL,8533241109600597474UL,59812437684114689UL,465828953912927UL,3809348870299UL,32041141439UL,274364832UL,2300405UL},
+/*108*/ {9953876343966030786UL,14411518807585587200UL,8414998642274246565UL,58437490571347410UL,450906563038320UL,3653178124807UL,30443048684UL,258269060UL,2146073UL},
+/*109*/ {9823298087164862999UL,15852670688344145920UL,8299461918788818903UL,57106389349462941UL,436593190733845UL,3504761807863UL,28938305574UL,243253024UL,2003370UL},
+/*110*/ {9694504514562279595UL,13546827679130451968UL,8186545043860896290UL,55817352571777534UL,422858731593930UL,3363648960257UL,27520676589UL,229235368UL,1871327UL},
+/*111*/ {9567455339348762955UL,8358680908399640576UL,8076165596557351891UL,54568686463224142UL,409674823287803UL,3229418614013UL,26184394080UL,216141526UL,1749061UL},
+/*112*/ {9442111536513312906UL,3170534137668829184UL,7968244460063675524UL,53358779866496707UL,397014731140561UL,3101677551786UL,24924119379UL,203903102UL,1635769UL},
+/*113*/ {9318435292482490724UL,5764607523034234880UL,7862705661222525215UL,52186099521387403UL,384853241299849UL,2980058251707UL,23734907446UL,192457312UL,1530723UL},
+/*114*/ {9196389957194550617UL,15852670688344145920UL,7759476219201151458UL,51049185652638190UL,373166561780571UL,2864217000866UL,22612174716UL,181746474UL,1433257UL},
+/*115*/ {9075939998470720079UL,4323455642275676160UL,7658486002693640777UL,49946647843653283UL,361932230743941UL,2753832162261UL,21551669817UL,171717562UL,1342765UL},
+/*116*/ {8957050958554628451UL,3458764513820540928UL,7559667595107359979UL,48877161175262271UL,351129031424819UL,2648602581540UL,20549446891UL,162321787UL,1258694UL},
+/*117*/ {8839689412699170251UL,7782220156096217088UL,7462956167222898252UL,47839462610402420UL,340736913173308UL,2548246121173UL,19601841262UL,153514228UL,1180539UL},
+/*118*/ {8723822929687778758UL,11240984669916758016UL,7368289356853513288UL,46832347607119068UL,330736918123607UL,2452498310883UL,18705447227UL,145253499UL,1107839UL},
+/*119*/ {8609420034184223938UL,2594073385365405696UL,7275607155063872386UL,45854666943679197UL,321111113045607UL,2361111104237UL,17857097776UL,137501440UL,1040171UL},
+/*120*/ {8496450170811680640UL,4323455642275676160UL,7184851798538995239UL,44905323740868096UL,311842525973250UL,2273851732233UL,17053846043UL,130222842UL,977149UL},
+/*121*/ {8384883669867978007UL,4899916394579099648UL,7095967667722983013UL,43983270667703858UL,302915087238478UL,2190501645593UL,16292948345UL,123385200UL,918420UL},
+/*122*/ {8274691714589675607UL,3458764513820540928UL,7008901190373567770UL,43087507317869751UL,294313574571266UL,2110855538239UL,15571848649UL,116958480UL,863659UL},
+/*123*/ {8165846309882949281UL,288230376151711744UL,6923600750202927039UL,42217077745139292UL,286023561954881UL,2034720445115UL,14888164346UL,110914920UL,812570UL},
+/*124*/ {8058320252444240538UL,12970366926827028480UL,6840016600297752792UL,41371068146961741UL,278031371951600UL,1961914908156UL,14239673201UL,105228833UL,764878UL},
+/*125*/ {7952087102198255480UL,4611686018427387904UL,6758100781032398596UL,40548604686193949UL,270324031237754UL,1892268204754UL,13624301387UL,99876446UL,720335UL},
+/*126*/ {7847121154985218247UL,2017612633061982208UL,6677807042208195501UL,39748851441715036UL,262889229108564UL,1825619633584UL,13040112490UL,94835736UL,678708UL},
+/*127*/ {7743397416433313389UL,3746994889972252672UL,6599090769169855731UL,38971008479349155UL,255715278732793UL,1761817853124UL,12485297415UL,90086294UL,639787UL},
+/*128*/ {7640891576956012808UL,12970366926827028480UL,6521908912666391089UL,38214310035154274UL,248791080955140UL,1700720268588UL,11958165103UL,85609191UL,603376UL},
+/*129*/ {7539579987817495892UL,3458764513820540928UL,6446219922239267583UL,37478022803716333UL,242106090460573UL,1642192463401UL,11457133985UL,81386864UL,569296UL},
+/*130*/ {7439439638212654254UL,1441151880758558720UL,6371983682934696814UL,36761444324622934UL,235650284129659UL,1586107671663UL,10980724123UL,77403006UL,537381UL},
+/*131*/ {7340448133311241904UL,8646911284551352320UL,6299161455150117487UL,36063901460782818UL,229414131427537UL,1532346288351UL,10527549962UL,73642468UL,507479UL},
+/*132*/ {7242583673218603016UL,10088063165309911040UL,6227715817437128383UL,35384748962710678UL,223388566681549UL,1480795414310UL,10096313657UL,70091167UL,479448UL},
+/*133*/ {7145825032808096971UL,9799832789158199296UL,6157610612094471828UL,34723368113314429UL,217564963113912UL,1431348433314UL,9685798912UL,66736007UL,453159UL},
+/*134*/ {7050151542382857064UL,5764607523034234880UL,6088810893395202061UL,34079165448107229UL,211935108506165UL,1383904618720UL,9294865293UL,63564801UL,428492UL},
+/*135*/ {6955543069126877200UL,15564440312192434176UL,6021282878301968301UL,33451571546121816UL,206491182381624UL,1338368767447UL,8922442981UL,60566202UL,405336UL},
+/*136*/ {6861979999307631219UL,17582052945254416384UL,5954993899533454775UL,32840039887132806UL,201225734600797UL,1294650859189UL,8567527919UL,57729639UL,383588UL},
+/*137*/ {6769443221194502384UL,16140901064495857664UL,5889912360853501655UL,32244045771095609UL,196131665272676UL,1252665738955UL,8229177329UL,55045260UL,363153UL},
+/*138*/ {6677914108659245588UL,3458764513820540928UL,5826007694462329777UL,31663085295990731UL,191202205892133UL,1212332821198UL,7906505558UL,52503878UL,343943UL},
+/*139*/ {6587374505426530656UL,16140901064495857664UL,5763250320376652025UL,31096674390521324UL,186430901620390UL,1173575813893UL,7598680241UL,50096921UL,325876UL},
+/*140*/ {6497806709944329931UL,17582052945254416384UL,5701611607692315774UL,30544347898351522UL,181811594631690UL,1136322461122UL,7304918740UL,47816387UL,308878UL},
+/*141*/ {6409193460845524524UL,16717361816799281152UL,5641063837629520819UL,30005658710795164UL,177338408454960UL,1100504302773UL,7024484848UL,45654803UL,292877UL},
+/*142*/ {6321517922973618262UL,18158513697557839872UL,5581580168266629825UL,29480176945070078UL,173005733244515UL,1066056450128UL,6756685731UL,43605187UL,277810UL},
+/*143*/ {6234763673946872755UL,6917529027641081856UL,5523134600874164888UL,28967489165423800UL,168808211918587UL,1032917376170UL,6500869093UL,41661010UL,263615UL},
+/*144*/ {6148914691236517205UL,6052837899185946624UL,5465701947765793065UL,28467197644613372UL,164740727108964UL,1001028719557UL,6256420544UL,39816167UL,250236UL},
+/*145*/ {6063955339735948084UL,15276209936040722432UL,5409257801587972342UL,27978919663385938UL,160798388869027UL,970335101288UL,6022761151UL,38064945UL,237622UL},
+/*146*/ {5979870359799021710UL,5188146770730811392UL,5353778505974481819UL,27502286845759206UL,156976523091283UL,940783953150UL,5799345170UL,36401997UL,225723UL},
+/*147*/ {5896644855726661872UL,2017612633061982208UL,5299241127496318577UL,27036944528042330UL,153270660588913UL,912325357125UL,5585657934UL,34822313UL,214495UL},
+/*148*/ {5814264284682059401UL,0UL,5245623428841429404UL,26582551159669300UL,149676526799093UL,884911894979UL,5381213885UL,33321199UL,203896UL},
+/*149*/ {5732714446015735013UL,9223372036854775808UL,5192903843162477661UL,26138777734039217UL,146190032068771UL,858498507329UL,5185554749UL,31894257UL,193887UL},
+/*150*/ {5651981470982674790UL,11240984669916758016UL,5141061449534341629UL,25705307247671614UL,142807262486309UL,833042361535UL,4998247834UL,30537359UL,184431UL},
+/*151*/ {5572051812834632764UL,2017612633061982208UL,5090075949466317215UL,25281834186090890UL,139524471224953UL,808502727802UL,4818884442UL,29246634UL,175494UL},
+/*152*/ {5492912237271530626UL,17582052945254416384UL,5039927644417069942UL,24868064034952563UL,136338070366389UL,784840862943UL,4647078394UL,28018450UL,167045UL},
+/*153*/ {5414549813236673629UL,15564440312192434176UL,4990597414263262793UL,24463712815015914UL,133244623174829UL,762019901268UL,4482464651UL,26849393UL,159054UL},
+/*154*/ {5336951904041247149UL,6341068275337658368UL,4942066696675490649UL,24068506639653288UL,130240836794056UL,740004752137UL,4324698028UL,25736258UL,151493UL},
+/*155*/ {5260106158804262890UL,15564440312192434176UL,4894317467357690733UL,23682181293666174UL,127323555341719UL,718762003713UL,4173451998UL,24676033UL,144337UL},
+/*156*/ {5184000504194789721UL,864691128455135232UL,4847332221108582835UL,23304481832252734UL,124489753376877UL,698259832517UL,4028417567UL,23665886UL,137562UL},
+/*157*/ {5108623136463934038UL,3170534137668829184UL,4801093953665933379UL,22935162199041019UL,121736529718388UL,678467918388UL,3889302234UL,22703152UL,131145UL},
+/*158*/ {5033962513754630560UL,4323455642275676160UL,4755586144296543223UL,22573984862167075UL,119061101593222UL,659357364507UL,3755829010UL,21785326UL,125065UL},
+/*159*/ {4960007348677868472UL,9799832789158199296UL,4710792739096839260UL,22220720467437863UL,116460799095125UL,640900622139UL,3627735504UL,20910047UL,119303UL},
+/*160*/ {4886746601144511923UL,8070450532247928832UL,4666698134970812705UL,21875147507675630UL,113933059935373UL,623071419804UL,3504773070UL,20075095UL,113840UL},
+/*161*/ {4814169471442379666UL,4611686018427387904UL,4623287164253800004UL,21537052007393426UL,111475424468495UL,605844696569UL,3386706006UL,19278377UL,108658UL},
+/*162*/ {4742265393548727872UL,11529215046068469760UL,4580545079952252736UL,21206227222001121UL,109085530976979UL,589196539224UL,3273310807UL,18517920UL,103742UL},
+/*163*/ {4671024028668734341UL,7205759403792793600UL,4538457541571197241UL,20882473350787671UL,106761111199973UL,573104123072UL,3164375462UL,17791865UL,99077UL},
+/*164*/ {4600435258991012948UL,9223372036854775808UL,4497010601502549181UL,20565597262968931UL,104499986091967UL,557545656109UL,3059698798UL,17098460UL,94648UL},
+/*165*/ {4530489181651595587UL,12105675798371893248UL,4456190691948828547UL,20255412236130997UL,102300061798305UL,542500326395UL,2959089865UL,16436049UL,90442UL},
+/*166*/ {4461176102898206310UL,14987979559889010688UL,4415984612358122008UL,19951737706437258UL,100159325835208UL,527948252392UL,2862367360UL,15803073UL,86447UL},
+/*167*/ {4392486532447020087UL,7205759403792793600UL,4376379517347367031UL,19654399030003107UL,98075843462785UL,513870436110UL,2769359082UL,15198058UL,82650UL},
+/*168*/ {4324411178024447676UL,16140901064495857664UL,4337362905092190340UL,19363227254875814UL,96047754240166UL,500248718865UL,2679901427UL,14619612UL,79042UL},
+/*169*/ {4256940940086819603UL,12682136550675316736UL,4298922606162626502UL,19078058903088545UL,94073268752627UL,487065739503UL,2593838911UL,14066421UL,75611UL},
+/*170*/ {4190066906711157116UL,8646911284551352320UL,4261046772785074583UL,18798735762287061UL,92150665501146UL,474304894934UL,2511023721UL,13537241UL,72347UL},
+/*171*/ {4123780348650517232UL,12970366926827028480UL,4223723868511825748UL,18525104686455345UL,90278287945440UL,461950302837UL,2431315297UL,13030900UL,69243UL},
+/*172*/ {4058072714547683378UL,15852670688344145920UL,4186942658280415812UL,18257017405292481UL,88454541692072UL,449986766398UL,2354579931UL,12546286UL,66288UL},
+/*173*/ {3992935626301243551UL,13258597302978740224UL,4150692198845927429UL,17994330341817576UL,86677891819705UL,438399740977UL,2280690403UL,12082348UL,63476UL},
+/*174*/ {3928360874578355112UL,8646911284551352320UL,4114961829570189742UL,17736904437802515UL,84946860334089UL,427175302560UL,2209525627UL,11638093UL,60798UL},
+/*175*/ {3864340414468740001UL,13546827679130451968UL,4079741163552601895UL,17484604986653983UL,83260023745767UL,416300117925UL,2140970320UL,11212579UL,58247UL},
+/*176*/ {3800866361274687005UL,14123288431433875456UL,4045020079088043385UL,17237301473386524UL,81616010763946UL,405761416384UL,2074914700UL,10804916UL,55817UL},
+/*177*/ {3737930986432059349UL,2882303761517117440UL,4010788711438031360UL,16994867421347567UL,80013500100321UL,395546963043UL,2011254187UL,10414259UL,53502UL},
+/*178*/ {3675526713557516935UL,1729382256910270464UL,3977037444901944907UL,16757180245373341UL,78451218377039UL,385645033461UL,1949889134UL,10039809UL,51294UL},
+/*179*/ {3613646114617363563UL,14699749183737298944UL,3943756905175761372UL,16524121111071605UL,76927938133312UL,376044389653UL,1890724565UL,9680808UL,49189UL},
+/*180*/ {3552281906213620964UL,4035225266123964416UL,3910937951986341791UL,16295574799943071UL,75442475925501UL,366734257338UL,1833669936UL,9336537UL,47182UL},
+/*181*/ {3491426945983113972UL,10952754293765046272UL,3878571671989863529UL,16071429580068476UL,73993690515815UL,357704304376UL,1778638899UL,9006316UL,45267UL},
+/*182*/ {3431074229105525154UL,13835058055282163712UL,3846649371923529981UL,15851577082102440UL,72580481145011UL,348944620313UL,1725549090UL,8689498UL,43439UL},
+/*183*/ {3371216884916543041UL,3170534137668829184UL,3815162572000191415UL,15635912180328636UL,71201785884781UL,340445696986UL,1674321926UL,8385471UL,41695UL},
+/*184*/ {3311848173622386342UL,6629298651489370112UL,3784102999535989209UL,15424332878543418UL,69856580065733UL,332198410113UL,1624882407UL,8093651UL,40030UL},
+/*185*/ {3252961483112137433UL,576460752303423488UL,3753462582801589456UL,15216740200546968UL,68543874777111UL,324194001822UL,1577158938UL,7813486UL,38439UL},
+/*186*/ {3194550325864462406UL,17870283321406128128UL,3723233445088002412UL,15013038085032253UL,67262715434610UL,316424064065UL,1531083158UL,7544452UL,36920UL},
+/*187*/ {3136608335945432464UL,5476377146882523136UL,3693407898978392997UL,14813133284672685UL,66012180412863UL,308880522864UL,1486589774UL,7286049UL,35469UL},
+/*188*/ {3079129266094292628UL,5188146770730811392UL,3663978440817675615UL,14616935269219437UL,64791379739336UL,301555623349UL,1443616412UL,7037806UL,34081UL},
+/*189*/ {3022106984894149114UL,17293822569102704640UL,3634937745372055150UL,14424356132428777UL,63599453846581UL,294441915538UL,1402103467UL,6799270UL,32756UL},
+/*190*/ {2965535474024666390UL,8070450532247928832UL,3606278660671026190UL,14235310502648775UL,62435572379937UL,287532240823UL,1361993971UL,6570014UL,31488UL},
+/*191*/ {2909408825593979328UL,6341068275337658368UL,3577994203024675341UL,14049715456903163UL,61298933057944UL,280819719123UL,1323233462UL,6349631UL,30275UL},
+/*192*/ {2853721239547135186UL,1729382256910270464UL,3550077552209447800UL,13867490438318144UL,60188760582885UL,274297736665UL,1285769859UL,6137734UL,29115UL},
+/*193*/ {2798467021148484606UL,2882303761517117440UL,3522522046815840202UL,13688557176745482UL,59104305598985UL,267959934360UL,1249553350UL,5933955UL,28006UL},
+/*194*/ {2743640578535540750UL,14123288431433875456UL,3495321179751767813UL,13512839612442391UL,58044843695973UL,261800196747UL,1214536279UL,5737942UL,26944UL},
+/*195*/ {2689236420341921220UL,11529215046068469760UL,3468468593895626311UL,13340263822675476UL,57009674455796UL,255812641468UL,1180673045UL,5549362UL,25927UL},
+/*196*/ {2635249153387078802UL,5188146770730811392UL,3441958077893327415UL,13170757951122417UL,55998120540408UL,249991609248UL,1147919999UL,5367898UL,24954UL},
+/*197*/ {2581673480430614533UL,6052837899185946624UL,3415783562093834095UL,13004252139951136UL,55009526818669UL,244331654357UL,1116235356UL,5193246UL,24021UL},
+/*198*/ {2528504197989050261UL,7493989779944505344UL,3389939114617955859UL,12840678464461945UL,54043259530492UL,238827535522UL,1085579105UL,5025118UL,23129UL},
+/*199*/ {2475736194213017980UL,3170534137668829184UL,3364418937555388075UL,12679970870183615UL,53098705486462UL,233474207271UL,1055912923UL,4863239UL,22273UL},
+/*200*/ {2423364446822899923UL,14123288431433875456UL,3339217363285192246UL,12522065112319463UL,52175271301265UL,228266811684UL,1027200100UL,4707347UL,21453UL},
+/*201*/ {2371384021101026852UL,6341068275337658368UL,3314328850915116970UL,12366898697444458UL,51272382659325UL,223200670532UL,999405458UL,4557193UL,20668UL},
+/*202*/ {2319790067938612317UL,7493989779944505344UL,3289747982835352702UL,12214410827358975UL,50389483611156UL,218271277781UL,972495284UL,4412538UL,19914UL},
+/*203*/ {2268577821935668102UL,6629298651489370112UL,3265469461382497689UL,12064542345009221UL,49526035898995UL,213474292440UL,946437263UL,4273156UL,19192UL},
+/*204*/ {2217742599552210628UL,10664523917613334528UL,3241488105609688195UL,11917235682388553UL,48681518310355UL,208805531749UL,921200408UL,4138829UL,18499UL},
+/*205*/ {2167279797309130029UL,13258597302978740224UL,3217798848159013720UL,11772434810337848UL,47855426058230UL,204260964673UL,896755006UL,4009350UL,17835UL},
+/*206*/ {2117184890037152952UL,15564440312192434176UL,3194396732232497797UL,11630085190166854UL,47047270186708UL,199836705689UL,873072556UL,3884523UL,17197UL},
+/*207*/ {2067453429172387059UL,4035225266123964416UL,3171276908658077476UL,11490133727022014UL,46256577000845UL,195529008868UL,850125713UL,3764159UL,16585UL},
+/*208*/ {2018081041096989784UL,10664523917613334528UL,3148434633047160215UL,11352528724929658UL,45482887519703UL,191334262217UL,827888238UL,3648077UL,15998UL},
+/*209*/ {1969063425523556281UL,7782220156096217088UL,3125865263040475850UL,11217219843446678UL,44725756951496UL,187248982274UL,806334950UL,3536107UL,15434UL},
+/*210*/ {1920396353921871708UL,8070450532247928832UL,3103564255639074030UL,11084158055853830UL,43984754189853UL,183269808953UL,785441673UL,3428083UL,14892UL},
+/*211*/ {1872075667986721246UL,4323455642275676160UL,3081527164617444225UL,10953295608829773UL,43259461330249UL,179393500613UL,765185197UL,3323849UL,14372UL},
+/*212*/ {1824097278145497499UL,4035225266123964416UL,3059749638015856470UL,10824585983546657UL,42549473205725UL,175616929347UL,745543231UL,3223255UL,13873UL},
+/*213*/ {1776457162104389373UL,11240984669916758016UL,3038227415709136674UL,10697983858130758UL,41854396941005UL,171937076484UL,726494365UL,3126158UL,13393UL},
+/*214*/ {1729151363431979185UL,9511602413006487552UL,3016956327049200867UL,10573445071434111UL,41173851524239UL,168351028283UL,708018032UL,3032419UL,12931UL},
+/*215*/ {1682175990179115728UL,6917529027641081856UL,2995932288578778395UL,10450926588065502UL,40507467395567UL,164855971818UL,690094466UL,2941909UL,12488UL},
+/*216*/ {1635527213533970389UL,9223372036854775808UL,2975151301813855112UL,10330386464631437UL,39854886051784UL,161449191047UL,672704675UL,2854502UL,12062UL},
+/*217*/ {1589201266511221223UL,2882303761517117440UL,2954609451092464197UL,10211783817139849UL,39215759666403UL,158128063041UL,655830399UL,2770078UL,11652UL},
+/*218*/ {1543194442674346228UL,1729382256910270464UL,2934302901487544637UL,10095078789521365UL,38589750724438UL,154890054388UL,639454087UL,2688521UL,11258UL},
+/*219*/ {1497503094890042007UL,1441151880758558720UL,2914227896781675780UL,9980232523224913UL,37976531671297UL,151732717745UL,623558858UL,2609723UL,10879UL},
+/*220*/ {1452123634113817562UL,14699749183737298944UL,2894380757501580971UL,9867207127846295UL,37375784575146UL,148653688536UL,608128480UL,2533578UL,10514UL},
+/*221*/ {1407052528205845270UL,10376293541461622784UL,2874757879010374210UL,9755965652750135UL,36787200802197UL,145650681798UL,593147336UL,2459984UL,10164UL},
+/*222*/ {1362286300776182114UL,8935141660703064064UL,2855355729655601258UL,9646472059647298UL,36210480704355UL,142721489156UL,578600404UL,2388846UL,9826UL},
+/*223*/ {1317821530058504137UL,4899916394579099648UL,2836170848971200825UL,9538691196091479UL,35645333318701UL,139863975923UL,564473226UL,2320071UL,9501UL},
+/*224*/ {1273654847811525781UL,6052837899185946624UL,2817199845931582485UL,9432588769860206UL,35091476078324UL,137076078332UL,550751889UL,2253571UL,9188UL},
+/*225*/ {1229782938247303441UL,1152921504606846976UL,2798439397256086052UL,9328131324186950UL,34548634534001UL,134355800870UL,537423000UL,2189260UL,8887UL},
+/*226*/ {1186202536985649146UL,7205759403792793600UL,2779886245762152320UL,9225286213812449UL,34016542086306UL,131701213738UL,524473664UL,2127058UL,8597UL},
+/*227*/ {1142910430033905901UL,18158513697557839872UL,2761537198765597535UL,9124021581824659UL,33494939727674UL,129110450404UL,511891465UL,2066886UL,8317UL},
+/*228*/ {1099903452791360854UL,8070450532247928832UL,2743389126526443855UL,9024306337258036UL,32983575794050UL,126581705265UL,499664444UL,2008670UL,8048UL},
+/*229*/ {1057178489077596191UL,9511602413006487552UL,2725438960738815414UL,8926110133424065UL,32482205725685UL,124113231402UL,487781083UL,1952337UL,7789UL},
+/*230*/ {1014732470184100532UL,12105675798371893248UL,2707683693063464647UL,8829403346946078UL,31990591836741UL,121703338430UL,476230286UL,1897820UL,7539UL},
+/*231*/ {972562373948485581UL,6052837899185946624UL,2690120373701546278UL,8734157057472550UL,31508503093316UL,119350390429UL,465001358UL,1845051UL,7298UL},
+/*232*/ {930665223850674015UL,6917529027641081856UL,2672746110008306984UL,8640343028044094UL,31035714899565UL,117052803966UL,454083996UL,1793968UL,7066UL},
+/*233*/ {889038088130445021UL,16429131440647569408UL,2655558065145407263UL,8547933686090364UL,30572008891578UL,114809046196UL,443468267UL,1744510UL,6842UL},
+/*234*/ {847678078925743570UL,11529215046068469760UL,2638553456770638658UL,8456902105034096UL,30117172738708UL,112617633036UL,433144596UL,1696619UL,6626UL},
+/*235*/ {806582351431178495UL,576460752303423488UL,2621729555763844100UL,8367221986480351UL,29670999952041UL,110477127415UL,423103751UL,1650238UL,6418UL},
+/*236*/ {765748103076152740UL,4323455642275676160UL,2605083684987892116UL,8278867642969994UL,29233289699737UL,108386137594UL,413336830UL,1605314UL,6218UL},
+/*237*/ {725172572722086771UL,9799832789158199296UL,2588613218083596744UL,8191813981277203UL,28803846628948UL,106343315552UL,403835245UL,1561796UL,6024UL},
+/*238*/ {684853039878213140UL,2594073385365405696UL,2572315578297514589UL,8106036486231662UL,28382480694073UL,104347355434UL,394590713UL,1519633UL,5837UL},
+/*239*/ {644786823935436601UL,5764607523034234880UL,2556188237341588380UL,8021511205046824UL,27969006991083UL,102396992065UL,385595246UL,1478778UL,5657UL},
+/*240*/ {604971283417769996UL,11529215046068469760UL,2540228714283642882UL,7938214732136382UL,27563245597682UL,100490999520UL,376841130UL,1439185UL,5483UL},
+/*241*/ {565403815250871370UL,4035225266123964416UL,2524434574467774006UL,7856124194401785UL,27165021419080UL,98628189746UL,368320927UL,1400810UL,5315UL},
+/*242*/ {526081854047222511UL,864691128455135232UL,2508803428463705670UL,7775217236974293UL,26774164039155UL,96807411247UL,360027453UL,1363611UL,5152UL},
+/*243*/ {487002871407503319UL,3746994889972252672UL,2493332931044221226UL,7695472009395743UL,26390507576790UL,95027547809UL,351953775UL,1327547UL,4996UL},
+/*244*/ {448164375237730105UL,6052837899185946624UL,2478020780189807439UL,7616867152222767UL,26013890547197UL,93287517283UL,344093199UL,1292579UL,4845UL},
+/*245*/ {409563909081739167UL,864691128455135232UL,2462864716119678796UL,7539381784039832UL,25644155728015UL,91586270411UL,336439262UL,1258670UL,4699UL},
+/*246*/ {371199051468609762UL,18158513697557839872UL,2447862520348378716UL,7462995488867007UL,25281150030026UL,89922789696UL,328985720UL,1225782UL,4557UL},
+/*247*/ {333067415274632942UL,2594073385365405696UL,2433012014767181805UL,7387688303948931UL,24924724372286UL,88296088320UL,321726545UL,1193883UL,4421UL},
+/*248*/ {295166647099444599UL,10664523917613334528UL,2418311060749547899UL,7313440707911938UL,24574733561521UL,86705209097UL,314655912UL,1162937UL,4289UL},
+/*249*/ {257494426655952636UL,5764607523034234880UL,2403757558279904161UL,7240233609276818UL,24231036175615UL,85149223468UL,307768191UL,1132914UL,4162UL},
+/*250*/ {220048466173699215UL,10088063165309911040UL,2389349445105056106UL,7168048335315167UL,23893494451041UL,83627230540UL,301057947UL,1103781UL,4039UL},
+/*251*/ {182826509815309846UL,1441151880758558720UL,2375084695907552059UL,7096866621237704UL,23561974174086UL,82138356147UL,294519922UL,1075509UL,3920UL},
+/*252*/ {145826333105691398UL,14411518807585587200UL,2360961321500348319UL,7026670599703416UL,23236344575730UL,80681751963UL,288149036UL,1048069UL,3805UL},
+/*253*/ {109045742373651188UL,13835058055282163712UL,2346977368042144228UL,6957442790638766UL,22916478230026UL,79256594634UL,281940380UL,1021434UL,3694UL},
+/*254*/ {72482574205618946UL,11817445422220181504UL,2333130916272777394UL,6889166091356625UL,22602250955886UL,77862084952UL,275889205UL,995577UL,3587UL},
+/*255*/ {36134694911162869UL,15276209936040722432UL,2319420080768089661UL,6821823766964969UL,22293541722099UL,76497447053UL,269990919UL,970472UL,3483UL},
};