From f1536309e16517a4034854b496cf4af8f1591a76 Mon Sep 17 00:00:00 2001 From: Torbjorn Granlund Date: Mon, 10 Sep 2012 13:42:44 +0200 Subject: Rewrite no more current form. Implement Lucas prime proving, and make its use the default. --- demos/factorize.c | 471 +++++++++++++++++++++++++++------------------- demos/primes.h | 552 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 832 insertions(+), 191 deletions(-) create mode 100644 demos/primes.h (limited to 'demos') diff --git a/demos/factorize.c b/demos/factorize.c index cd5689c30..9c9c6dbff 100644 --- a/demos/factorize.c +++ b/demos/factorize.c @@ -1,6 +1,6 @@ /* Factoring with Pollard's rho method. -Copyright 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2009 +Copyright 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2009, 2012 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under @@ -19,138 +19,268 @@ this program. If not, see http://www.gnu.org/licenses/. */ #include #include #include +#include #include "gmp.h" +static unsigned char primes_diff[] = { +#define P(a,b,c) a, +#include "primes.h" +#undef P +}; +#define PRIMES_PTAB_ENTRIES (sizeof(primes_diff) / sizeof(primes_diff[0])) + int flag_verbose = 0; -static unsigned add[] = {4, 2, 4, 2, 4, 6, 2, 6}; +/* Prove primality or run probabilistic tests. */ +int flag_prove_primality = 1; + +/* Number of Miller-Rabin tests to run when not proving primality. */ +#define MR_REPS 25 + +struct factors +{ + mpz_t *p; + unsigned long *e; + long nfactors; +}; + +void factor (mpz_t, struct factors *); void -factor_using_division (mpz_t t, unsigned int limit) +factor_init (struct factors *factors) { - mpz_t q, r; - unsigned long int f; - int ai; - unsigned *addv = add; - unsigned int failures; + factors->p = malloc (1); + factors->e = malloc (1); + factors->nfactors = 0; +} - if (flag_verbose > 0) +void +factor_clear (struct factors *factors) +{ + int i; + + for (i = 0; i < factors->nfactors; i++) + mpz_clear (factors->p[i]); + + free (factors->p); + free (factors->e); +} + +void +factor_insert (struct factors *factors, mpz_t prime) +{ + long nfactors = factors->nfactors; + mpz_t *p = factors->p; + unsigned long *e = factors->e; + long i, j; + + /* Locate position for insert new or increment e. */ + for (i = nfactors - 1; i >= 0; i--) { - printf ("[trial division (%u)] ", limit); - fflush (stdout); + if (mpz_cmp (p[i], prime) <= 0) + break; } - mpz_init (q); - mpz_init (r); + if (i < 0 || mpz_cmp (p[i], prime) != 0) + { + p = realloc (p, (nfactors + 1) * sizeof p[0]); + e = realloc (e, (nfactors + 1) * sizeof e[0]); + + mpz_init (p[nfactors]); + for (j = nfactors - 1; j > i; j--) + { + mpz_set (p[j + 1], p[j]); + e[j + 1] = e[j]; + } + mpz_set (p[i + 1], prime); + e[i + 1] = 1; - f = mpz_scan1 (t, 0); - mpz_div_2exp (t, t, f); - while (f) + factors->p = p; + factors->e = e; + factors->nfactors = nfactors + 1; + } + else { - printf ("2 "); - fflush (stdout); - --f; + e[i] += 1; } +} + +void +factor_insert_ui (struct factors *factors, unsigned long prime) +{ + mpz_t pz; + + mpz_init_set_ui (pz, prime); + factor_insert (factors, pz); + mpz_clear (pz); +} + + +void +factor_using_division (mpz_t t, struct factors *factors) +{ + mpz_t q; + unsigned long int p; + int i; - for (;;) + if (flag_verbose > 0) { - mpz_tdiv_qr_ui (q, r, t, 3); - if (mpz_cmp_ui (r, 0) != 0) - break; - mpz_set (t, q); - printf ("3 "); - fflush (stdout); + printf ("[trial division] "); } - for (;;) + mpz_init (q); + + p = mpz_scan1 (t, 0); + mpz_div_2exp (t, t, p); + while (p) { - mpz_tdiv_qr_ui (q, r, t, 5); - if (mpz_cmp_ui (r, 0) != 0) - break; - mpz_set (t, q); - printf ("5 "); - fflush (stdout); + factor_insert_ui (factors, 2); + --p; } - failures = 0; - f = 7; - ai = 0; - while (mpz_cmp_ui (t, 1) != 0) + p = 3; + for (i = 1; i <= PRIMES_PTAB_ENTRIES;) { - mpz_tdiv_qr_ui (q, r, t, f); - if (mpz_cmp_ui (r, 0) != 0) + if (! mpz_divisible_ui_p (t, p)) { - f += addv[ai]; - if (mpz_cmp_ui (q, f) < 0) - break; - ai = (ai + 1) & 7; - failures++; - if (failures > limit) + p += primes_diff[i++]; + if (mpz_cmp_ui (t, p * p) < 0) break; } else { - mpz_swap (t, q); - printf ("%lu ", f); - fflush (stdout); - failures = 0; + mpz_tdiv_q_ui (t, t, p); + factor_insert_ui (factors, p); } } - mpz_clears (q, r, NULL); + mpz_clear (q); } -void -factor_using_division_2kp (mpz_t t, unsigned int limit, unsigned long p) +static int +mp_millerrabin (mpz_srcptr n, mpz_srcptr nm1, mpz_ptr x, mpz_ptr y, + mpz_srcptr q, unsigned long int k) { - mpz_t r; - mpz_t f; - unsigned int k; + unsigned long int i; - if (flag_verbose > 0) + mpz_powm (y, x, q, n); + + if (mpz_cmp_ui (y, 1) == 0 || mpz_cmp (y, nm1) == 0) + return 1; + + for (i = 1; i < k; i++) { - printf ("[trial division (%u)] ", limit); - fflush (stdout); + mpz_powm_ui (y, y, 2, n); + if (mpz_cmp (y, nm1) == 0) + return 1; + if (mpz_cmp_ui (y, 1) == 0) + return 0; } + return 0; +} + +int +mp_prime_p (mpz_t n) +{ + int k, r, is_prime; + mpz_t q, a, nm1, tmp; + struct factors factors; - mpz_init (r); - mpz_init_set_ui (f, 2 * p); - mpz_add_ui (f, f, 1); - for (k = 1; k < limit; k++) + if (mpz_cmp_ui (n, 1) <= 0) + return 0; + + /* We have already casted out small primes. */ + if (mpz_cmp_ui (n, (long) FIRST_OMITTED_PRIME * FIRST_OMITTED_PRIME) < 0) + return 1; + + mpz_inits (q, a, nm1, tmp, NULL); + + /* Precomputation for Miller-Rabin. */ + mpz_sub_ui (nm1, n, 1); + + /* Find q and k, where q is odd and n = 1 + 2**k * q. */ + k = mpz_scan1 (nm1, 0); + mpz_tdiv_q_2exp (q, nm1, k); + + mpz_set_ui (a, 2); + + /* Perform a Miller-Rabin test, finds most composites quickly. */ + if (!mp_millerrabin (n, nm1, a, tmp, q, k)) + { + is_prime = 0; + goto ret2; + } + + if (flag_prove_primality) + { + /* Factor n-1 for Lucas. */ + mpz_set (tmp, nm1); + factor (tmp, &factors); + } + + /* Loop until Lucas proves our number prime, or Miller-Rabin proves our + number composite. */ + for (r = 0; r < PRIMES_PTAB_ENTRIES; r++) { - mpz_tdiv_r (r, t, f); - while (mpz_cmp_ui (r, 0) == 0) + int i; + + if (flag_prove_primality) { - mpz_tdiv_q (t, t, f); - mpz_tdiv_r (r, t, f); - mpz_out_str (stdout, 10, f); - fflush (stdout); - fputc (' ', stdout); + is_prime = 1; + for (i = 0; i < factors.nfactors && is_prime; i++) + { + mpz_divexact (tmp, nm1, factors.p[i]); + mpz_powm (tmp, a, tmp, n); + is_prime = mpz_cmp_ui (tmp, 1) != 0; + } + } + else + { + /* After enough Miller-Rabin runs, be content. */ + is_prime = (r == MR_REPS - 1); + } + + if (is_prime) + goto ret1; + + mpz_add_ui (a, a, primes_diff[r]); /* Establish new base. */ + + if (!mp_millerrabin (n, nm1, a, tmp, q, k)) + { + is_prime = 0; + goto ret1; } - mpz_add_ui (f, f, 2 * p); } - mpz_clears (f, r, NULL); + fprintf (stderr, "Lucas prime test failure. This should not happen\n"); + abort (); + + ret1: + if (flag_prove_primality) + factor_clear (&factors); + ret2: + mpz_clears (q, a, nm1, tmp, NULL); + + return is_prime; } void -factor_using_pollard_rho (mpz_t n, unsigned long a, unsigned long p) +factor_using_pollard_rho (mpz_t n, unsigned long a, struct factors *factors) { - mpz_t x, x1, y, P; - mpz_t t1, t2; + mpz_t x, z, y, P; + mpz_t t, t2; unsigned long long k, l, i; if (flag_verbose > 0) { printf ("[pollard-rho (%lu)] ", a); - fflush (stdout); } - mpz_inits (t1, t2, NULL); + mpz_inits (t, t2, NULL); mpz_init_set_si (y, 2); mpz_init_set_si (x, 2); - mpz_init_set_si (x1, 2); + mpz_init_set_si (z, 2); mpz_init_set_ui (P, 1); k = 1; l = 1; @@ -161,48 +291,32 @@ factor_using_pollard_rho (mpz_t n, unsigned long a, unsigned long p) { do { - if (p != 0) - { - mpz_powm_ui (x, x, p, n); - mpz_add_ui (x, x, a); - } - else - { - mpz_mul (t1, x, x); - mpz_mod (x, t1, n); - mpz_add_ui (x, x, a); - } + mpz_mul (t, x, x); + mpz_mod (x, t, n); + mpz_add_ui (x, x, a); - mpz_sub (t1, x1, x); - mpz_mul (t2, P, t1); + mpz_sub (t, z, x); + mpz_mul (t2, P, t); mpz_mod (P, t2, n); if (k % 32 == 1) { - mpz_gcd (t1, P, n); - if (mpz_cmp_ui (t1, 1) != 0) + mpz_gcd (t, P, n); + if (mpz_cmp_ui (t, 1) != 0) goto factor_found; mpz_set (y, x); } } while (--k != 0); - mpz_set (x1, x); + mpz_set (z, x); k = l; l = 2 * l; for (i = 0; i < k; i++) { - if (p != 0) - { - mpz_powm_ui (x, x, p, n); - mpz_add_ui (x, x, a); - } - else - { - mpz_mul (t1, x, x); - mpz_mod (x, t1, n); - mpz_add_ui (x, x, a); - } + mpz_mul (t, x, x); + mpz_mod (x, t, n); + mpz_add_ui (x, x, a); } mpz_set (y, x); } @@ -210,79 +324,64 @@ factor_using_pollard_rho (mpz_t n, unsigned long a, unsigned long p) factor_found: do { - if (p != 0) - { - mpz_powm_ui (y, y, p, n); mpz_add_ui (y, y, a); - } - else - { - mpz_mul (t1, y, y); - mpz_mod (y, t1, n); - mpz_add_ui (y, y, a); - } - mpz_sub (t1, x1, y); - mpz_gcd (t1, t1, n); + mpz_mul (t, y, y); + mpz_mod (y, t, n); + mpz_add_ui (y, y, a); + + mpz_sub (t, z, y); + mpz_gcd (t, t, n); } - while (mpz_cmp_ui (t1, 1) == 0); + while (mpz_cmp_ui (t, 1) == 0); - mpz_divexact (n, n, t1); /* divide by t1, before t1 is overwritten */ + mpz_divexact (n, n, t); /* divide by t, before t is overwritten */ - if (!mpz_probab_prime_p (t1, 25)) + if (!mp_prime_p (t)) { if (flag_verbose > 0) { printf ("[composite factor--restarting pollard-rho] "); - fflush (stdout); } - factor_using_pollard_rho (t1, a + 1, p); + factor_using_pollard_rho (t, a + 1, factors); } else { - mpz_out_str (stdout, 10, t1); - fflush (stdout); - fputc (' ', stdout); + factor_insert (factors, t); } - mpz_mod (x, x, n); - mpz_mod (x1, x1, n); - mpz_mod (y, y, n); - if (mpz_probab_prime_p (n, 25)) + + if (mp_prime_p (n)) { - mpz_out_str (stdout, 10, n); - fflush (stdout); - fputc (' ', stdout); + factor_insert (factors, n); break; } + + mpz_mod (x, x, n); + mpz_mod (z, z, n); + mpz_mod (y, y, n); } - mpz_clears (P, t2, t1, x1, x, y, NULL); + mpz_clears (P, t2, t, z, x, y, NULL); } void -factor (mpz_t t, unsigned long p) +factor (mpz_t t, struct factors *factors) { - unsigned int division_limit; - - if (mpz_sgn (t) == 0) - return; - - division_limit = 1500; - - if (p != 0) - factor_using_division_2kp (t, division_limit / 10, p); - else - factor_using_division (t, division_limit); + factor_init (factors); - if (mpz_cmp_ui (t, 1) != 0) + if (mpz_sgn (t) != 0) { - if (flag_verbose > 0) + factor_using_division (t, factors); + + if (mpz_cmp_ui (t, 1) != 0) { - printf ("[is number prime?] "); - fflush (stdout); + if (flag_verbose > 0) + { + printf ("[is number prime?] "); + } + if (mp_prime_p (t)) + factor_insert (factors, t); + else + factor_using_pollard_rho (t, 1, factors); } - if (mpz_probab_prime_p (t, 25)) - mpz_out_str (stdout, 10, t); - else - factor_using_pollard_rho (t, 1L, p); } } @@ -290,18 +389,18 @@ int main (int argc, char *argv[]) { mpz_t t; - unsigned long p; - int i; + int i, j, k; + struct factors factors; - if (argc > 1 && !strcmp (argv[1], "-v")) - { - flag_verbose = 1; - argv++; - argc--; - } - if (argc > 1 && !strcmp (argv[1], "-q")) + while (argc > 1) { - flag_verbose = -1; + if (!strcmp (argv[1], "-v")) + flag_verbose = 1; + else if (!strcmp (argv[1], "-w")) + flag_prove_primality = 0; + else + break; + argv++; argc--; } @@ -309,33 +408,19 @@ main (int argc, char *argv[]) mpz_init (t); if (argc > 1) { - p = 0; for (i = 1; i < argc; i++) { - if (!strncmp (argv[i], "-Mp", 3)) - { - p = atoi (argv[i] + 3); - mpz_set_ui (t, 1); - mpz_mul_2exp (t, t, p); - mpz_sub_ui (t, t, 1); - } - else if (!strncmp (argv[i], "-2kp", 4)) - { - p = atoi (argv[i] + 4); - continue; - } - else - { - mpz_set_str (t, argv[i], 0); - } + mpz_set_str (t, argv[i], 0); - if (mpz_cmp_ui (t, 0) == 0) - puts ("-"); - else - { - factor (t, p); - puts (""); - } + gmp_printf ("%Zd:", t); + factor (t, &factors); + + for (j = 0; j < factors.nfactors; j++) + for (k = 0; k < factors.e[j]; k++) + gmp_printf (" %Zd", factors.p[j]); + + puts (""); + factor_clear (&factors); } } else @@ -345,12 +430,16 @@ main (int argc, char *argv[]) mpz_inp_str (t, stdin, 0); if (feof (stdin)) break; - if (flag_verbose >= 0) - { - mpz_out_str (stdout, 10, t); printf (" = "); - } - factor (t, 0); + + gmp_printf ("%Zd:", t); + factor (t, &factors); + + for (j = 0; j < factors.nfactors; j++) + for (k = 0; k < factors.e[j]; k++) + gmp_printf (" %Zd", factors.p[j]); + puts (""); + factor_clear (&factors); } } diff --git a/demos/primes.h b/demos/primes.h new file mode 100644 index 000000000..b85c7e1ff --- /dev/null +++ b/demos/primes.h @@ -0,0 +1,552 @@ +P( 1, 0xaaaaaaaaaaaaaaabUL, 0x5555555555555555UL) /* 3 */ +P( 2, 0xcccccccccccccccdUL, 0x3333333333333333UL) /* 5 */ +P( 2, 0x6db6db6db6db6db7UL, 0x2492492492492492UL) /* 7 */ +P( 4, 0x2e8ba2e8ba2e8ba3UL, 0x1745d1745d1745d1UL) /* 11 */ +P( 2, 0x4ec4ec4ec4ec4ec5UL, 0x13b13b13b13b13b1UL) /* 13 */ +P( 4, 0xf0f0f0f0f0f0f0f1UL, 0x0f0f0f0f0f0f0f0fUL) /* 17 */ +P( 2, 0x86bca1af286bca1bUL, 0x0d79435e50d79435UL) /* 19 */ +P( 4, 0xd37a6f4de9bd37a7UL, 0x0b21642c8590b216UL) /* 23 */ +P( 6, 0x34f72c234f72c235UL, 0x08d3dcb08d3dcb08UL) /* 29 */ +P( 2, 0xef7bdef7bdef7bdfUL, 0x0842108421084210UL) /* 31 */ +P( 6, 0x14c1bacf914c1badUL, 0x06eb3e45306eb3e4UL) /* 37 */ +P( 4, 0x8f9c18f9c18f9c19UL, 0x063e7063e7063e70UL) /* 41 */ +P( 2, 0x82fa0be82fa0be83UL, 0x05f417d05f417d05UL) /* 43 */ +P( 4, 0x51b3bea3677d46cfUL, 0x0572620ae4c415c9UL) /* 47 */ +P( 6, 0x21cfb2b78c13521dUL, 0x04d4873ecade304dUL) /* 53 */ +P( 6, 0xcbeea4e1a08ad8f3UL, 0x0456c797dd49c341UL) /* 59 */ +P( 2, 0x4fbcda3ac10c9715UL, 0x04325c53ef368eb0UL) /* 61 */ +P( 6, 0xf0b7672a07a44c6bUL, 0x03d226357e16ece5UL) /* 67 */ +P( 4, 0x193d4bb7e327a977UL, 0x039b0ad12073615aUL) /* 71 */ +P( 2, 0x7e3f1f8fc7e3f1f9UL, 0x0381c0e070381c0eUL) /* 73 */ +P( 6, 0x9b8b577e613716afUL, 0x033d91d2a2067b23UL) /* 79 */ +P( 4, 0xa3784a062b2e43dbUL, 0x03159721ed7e7534UL) /* 83 */ +P( 6, 0xf47e8fd1fa3f47e9UL, 0x02e05c0b81702e05UL) /* 89 */ +P( 8, 0xa3a0fd5c5f02a3a1UL, 0x02a3a0fd5c5f02a3UL) /* 97 */ +P( 4, 0x3a4c0a237c32b16dUL, 0x0288df0cac5b3f5dUL) /* 101 */ +P( 2, 0xdab7ec1dd3431b57UL, 0x027c45979c95204fUL) /* 103 */ +P( 4, 0x77a04c8f8d28ac43UL, 0x02647c69456217ecUL) /* 107 */ +P( 2, 0xa6c0964fda6c0965UL, 0x02593f69b02593f6UL) /* 109 */ +P( 4, 0x90fdbc090fdbc091UL, 0x0243f6f0243f6f02UL) /* 113 */ +P(14, 0x7efdfbf7efdfbf7fUL, 0x0204081020408102UL) /* 127 */ +P( 4, 0x03e88cb3c9484e2bUL, 0x01f44659e4a42715UL) /* 131 */ +P( 6, 0xe21a291c077975b9UL, 0x01de5d6e3f8868a4UL) /* 137 */ +P( 2, 0x3aef6ca970586723UL, 0x01d77b654b82c339UL) /* 139 */ +P(10, 0xdf5b0f768ce2cabdUL, 0x01b7d6c3dda338b2UL) /* 149 */ +P( 2, 0x6fe4dfc9bf937f27UL, 0x01b2036406c80d90UL) /* 151 */ +P( 6, 0x5b4fe5e92c0685b5UL, 0x01a16d3f97a4b01aUL) /* 157 */ +P( 6, 0x1f693a1c451ab30bUL, 0x01920fb49d0e228dUL) /* 163 */ +P( 4, 0x8d07aa27db35a717UL, 0x01886e5f0abb0499UL) /* 167 */ +P( 6, 0x882383b30d516325UL, 0x017ad2208e0ecc35UL) /* 173 */ +P( 6, 0xed6866f8d962ae7bUL, 0x016e1f76b4337c6cUL) /* 179 */ +P( 2, 0x3454dca410f8ed9dUL, 0x016a13cd15372904UL) /* 181 */ +P(10, 0x1d7ca632ee936f3fUL, 0x01571ed3c506b39aUL) /* 191 */ +P( 2, 0x70bf015390948f41UL, 0x015390948f40feacUL) /* 193 */ +P( 4, 0xc96bdb9d3d137e0dUL, 0x014cab88725af6e7UL) /* 197 */ +P( 2, 0x2697cc8aef46c0f7UL, 0x0149539e3b2d066eUL) /* 199 */ +P(12, 0xc0e8f2a76e68575bUL, 0x013698df3de07479UL) /* 211 */ +P(12, 0x687763dfdb43bb1fUL, 0x0125e22708092f11UL) /* 223 */ +P( 4, 0x1b10ea929ba144cbUL, 0x0120b470c67c0d88UL) /* 227 */ +P( 2, 0x1d10c4c0478bbcedUL, 0x011e2ef3b3fb8744UL) /* 229 */ +P( 4, 0x63fb9aeb1fdcd759UL, 0x0119453808ca29c0UL) /* 233 */ +P( 6, 0x64afaa4f437b2e0fUL, 0x0112358e75d30336UL) /* 239 */ +P( 2, 0xf010fef010fef011UL, 0x010fef010fef010fUL) /* 241 */ +P(10, 0x28cbfbeb9a020a33UL, 0x0105197f7d734041UL) /* 251 */ +P( 6, 0xff00ff00ff00ff01UL, 0x00ff00ff00ff00ffUL) /* 257 */ +P( 6, 0xd624fd1470e99cb7UL, 0x00f92fb2211855a8UL) /* 263 */ +P( 6, 0x8fb3ddbd6205b5c5UL, 0x00f3a0d52cba8723UL) /* 269 */ +P( 2, 0xd57da36ca27acdefUL, 0x00f1d48bcee0d399UL) /* 271 */ +P( 6, 0xee70c03b25e4463dUL, 0x00ec979118f3fc4dUL) /* 277 */ +P( 4, 0xc5b1a6b80749cb29UL, 0x00e939651fe2d8d3UL) /* 281 */ +P( 2, 0x47768073c9b97113UL, 0x00e79372e225fe30UL) /* 283 */ +P(10, 0x2591e94884ce32adUL, 0x00dfac1f74346c57UL) /* 293 */ +P(14, 0xf02806abc74be1fbUL, 0x00d578e97c3f5fe5UL) /* 307 */ +P( 4, 0x7ec3e8f3a7198487UL, 0x00d2ba083b445250UL) /* 311 */ +P( 2, 0x58550f8a39409d09UL, 0x00d161543e28e502UL) /* 313 */ +P( 4, 0xec9e48ae6f71de15UL, 0x00cebcf8bb5b4169UL) /* 317 */ +P(14, 0x2ff3a018bfce8063UL, 0x00c5fe740317f9d0UL) /* 331 */ +P( 6, 0x7f9ec3fcf61fe7b1UL, 0x00c2780613c0309eUL) /* 337 */ +P(10, 0x89f5abe570e046d3UL, 0x00bcdd535db1cc5bUL) /* 347 */ +P( 2, 0xda971b23f1545af5UL, 0x00bbc8408cd63069UL) /* 349 */ +P( 4, 0x79d5f00b9a7862a1UL, 0x00b9a7862a0ff465UL) /* 353 */ +P( 6, 0x4dba1df32a128a57UL, 0x00b68d31340e4307UL) /* 359 */ +P( 8, 0x87530217b7747d8fUL, 0x00b2927c29da5519UL) /* 367 */ +P( 6, 0x30baae53bb5e06ddUL, 0x00afb321a1496fdfUL) /* 373 */ +P( 6, 0xee70206c12e9b5b3UL, 0x00aceb0f891e6551UL) /* 379 */ +P( 4, 0xcdde9462ec9dbe7fUL, 0x00ab1cbdd3e2970fUL) /* 383 */ +P( 6, 0xafb64b05ec41cf4dUL, 0x00a87917088e262bUL) /* 389 */ +P( 8, 0x02944ff5aec02945UL, 0x00a513fd6bb00a51UL) /* 397 */ +P( 4, 0x2cb033128382df71UL, 0x00a36e71a2cb0331UL) /* 401 */ +P( 8, 0x1ccacc0c84b1c2a9UL, 0x00a03c1688732b30UL) /* 409 */ +P(10, 0x19a93db575eb3a0bUL, 0x009c69169b30446dUL) /* 419 */ +P( 2, 0xcebeef94fa86fe2dUL, 0x009baade8e4a2f6eUL) /* 421 */ +P(10, 0x6faa77fb3f8df54fUL, 0x00980e4156201301UL) /* 431 */ +P( 2, 0x68a58af00975a751UL, 0x00975a750ff68a58UL) /* 433 */ +P( 6, 0xd56e36d0c3efac07UL, 0x009548e4979e0829UL) /* 439 */ +P( 4, 0xd8b44c47a8299b73UL, 0x0093efd1c50e726bUL) /* 443 */ +P( 6, 0x02d9ccaf9ba70e41UL, 0x0091f5bcb8bb02d9UL) /* 449 */ +P( 8, 0x0985e1c023d9e879UL, 0x008f67a1e3fdc261UL) /* 457 */ +P( 4, 0x2a343316c494d305UL, 0x008e2917e0e702c6UL) /* 461 */ +P( 2, 0x70cb7916ab67652fUL, 0x008d8be33f95d715UL) /* 463 */ +P( 4, 0xd398f132fb10fe5bUL, 0x008c55841c815ed5UL) /* 467 */ +P(12, 0x6f2a38a6bf54fa1fUL, 0x0088d180cd3a4133UL) /* 479 */ +P( 8, 0x211df689b98f81d7UL, 0x00869222b1acf1ceUL) /* 487 */ +P( 4, 0x0e994983e90f1ec3UL, 0x0085797b917765abUL) /* 491 */ +P( 8, 0xad671e44bed87f3bUL, 0x008355ace3c897dbUL) /* 499 */ +P( 4, 0xf9623a0516e70fc7UL, 0x00824a4e60b3262bUL) /* 503 */ +P( 6, 0x4b7129be9dece355UL, 0x0080c121b28bd1baUL) /* 509 */ +P(12, 0x190f3b7473f62c39UL, 0x007dc9f3397d4c29UL) /* 521 */ +P( 2, 0x63dacc9aad46f9a3UL, 0x007d4ece8fe88139UL) /* 523 */ +P(18, 0xc1108fda24e8d035UL, 0x0079237d65bcce50UL) /* 541 */ +P( 6, 0xb77578472319bd8bUL, 0x0077cf53c5f7936cUL) /* 547 */ +P(10, 0x473d20a1c7ed9da5UL, 0x0075a8accfbdd11eUL) /* 557 */ +P( 6, 0xfbe85af0fea2c8fbUL, 0x007467ac557c228eUL) /* 563 */ +P( 6, 0x58a1f7e6ce0f4c09UL, 0x00732d70ed8db8e9UL) /* 569 */ +P( 2, 0x1a00e58c544986f3UL, 0x0072c62a24c3797fUL) /* 571 */ +P( 6, 0x7194a17f55a10dc1UL, 0x007194a17f55a10dUL) /* 577 */ +P(10, 0x7084944785e33763UL, 0x006fa549b41da7e7UL) /* 587 */ +P( 6, 0xba10679bd84886b1UL, 0x006e8419e6f61221UL) /* 593 */ +P( 6, 0xebe9c6bb31260967UL, 0x006d68b5356c207bUL) /* 599 */ +P( 2, 0x97a3fe4bd1ff25e9UL, 0x006d0b803685c01bUL) /* 601 */ +P( 6, 0x6c6388395b84d99fUL, 0x006bf790a8b2d207UL) /* 607 */ +P( 6, 0x8c51da6a1335df6dUL, 0x006ae907ef4b96c2UL) /* 613 */ +P( 4, 0x46f3234475d5add9UL, 0x006a37991a23aeadUL) /* 617 */ +P( 2, 0x905605ca3c619a43UL, 0x0069dfbdd4295b66UL) /* 619 */ +P(12, 0xcee8dff304767747UL, 0x0067dc4c45c8033eUL) /* 631 */ +P(10, 0xff99c27f00663d81UL, 0x00663d80ff99c27fUL) /* 641 */ +P( 2, 0xacca407f671ddc2bUL, 0x0065ec17e3559948UL) /* 643 */ +P( 4, 0xe71298bac1e12337UL, 0x00654ac835cfba5cUL) /* 647 */ +P( 6, 0xfa1e94309cd09045UL, 0x00645c854ae10772UL) /* 653 */ +P( 6, 0xbebccb8e91496b9bUL, 0x006372990e5f901fUL) /* 659 */ +P( 2, 0x312fa30cc7d7b8bdUL, 0x006325913c07beefUL) /* 661 */ +P(12, 0x6160ff9e9f006161UL, 0x006160ff9e9f0061UL) /* 673 */ +P( 4, 0x6b03673b5e28152dUL, 0x0060cdb520e5e88eUL) /* 677 */ +P( 6, 0xfe802ffa00bfe803UL, 0x005ff4017fd005ffUL) /* 683 */ +P( 8, 0xe66fe25c9e907c7bUL, 0x005ed79e31a4dccdUL) /* 691 */ +P(10, 0x3f8b236c76528895UL, 0x005d7d42d48ac5efUL) /* 701 */ +P( 8, 0xf6f923bf01ce2c0dUL, 0x005c6f35ccba5028UL) /* 709 */ +P(10, 0x6c3d3d98bed7c42fUL, 0x005b2618ec6ad0a5UL) /* 719 */ +P( 8, 0x30981efcd4b010e7UL, 0x005a2553748e42e7UL) /* 727 */ +P( 6, 0x6f691fc81ebbe575UL, 0x0059686cf744cd5bUL) /* 733 */ +P( 6, 0xb10480ddb47b52cbUL, 0x0058ae97bab79976UL) /* 739 */ +P( 4, 0x74cd59ed64f3f0d7UL, 0x0058345f1876865fUL) /* 743 */ +P( 8, 0x0105cb81316d6c0fUL, 0x005743d5bb24795aUL) /* 751 */ +P( 6, 0x9be64c6d91c1195dUL, 0x005692c4d1ab74abUL) /* 757 */ +P( 4, 0x71b3f945a27b1f49UL, 0x00561e46a4d5f337UL) /* 761 */ +P( 8, 0x77d80d50e508fd01UL, 0x005538ed06533997UL) /* 769 */ +P( 4, 0xa5eb778e133551cdUL, 0x0054c807f2c0bec2UL) /* 773 */ +P(14, 0x18657d3c2d8a3f1bUL, 0x005345efbc572d36UL) /* 787 */ +P(10, 0x2e40e220c34ad735UL, 0x00523a758f941345UL) /* 797 */ +P(12, 0xa76593c70a714919UL, 0x005102370f816c89UL) /* 809 */ +P( 2, 0x1eef452124eea383UL, 0x0050cf129fb94acfUL) /* 811 */ +P(10, 0x38206dc242ba771dUL, 0x004fd31941cafdd1UL) /* 821 */ +P( 2, 0x4cd4c35807772287UL, 0x004fa1704aa75945UL) /* 823 */ +P( 4, 0x83de917d5e69ddf3UL, 0x004f3ed6d45a63adUL) /* 827 */ +P( 2, 0x882ef0403b4a6c15UL, 0x004f0de57154ebedUL) /* 829 */ +P(10, 0xf8fb6c51c606b677UL, 0x004e1cae8815f811UL) /* 839 */ +P(14, 0xb4abaac446d3e1fdUL, 0x004cd47ba5f6ff19UL) /* 853 */ +P( 4, 0xa9f83bbe484a14e9UL, 0x004c78ae734df709UL) /* 857 */ +P( 2, 0x0bebbc0d1ce874d3UL, 0x004c4b19ed85cfb8UL) /* 859 */ +P( 4, 0xbd418eaf0473189fUL, 0x004bf093221d1218UL) /* 863 */ +P(14, 0x44e3af6f372b7e65UL, 0x004aba3c21dc633fUL) /* 877 */ +P( 4, 0xc87fdace4f9e5d91UL, 0x004a6360c344de00UL) /* 881 */ +P( 2, 0xec93479c446bd9bbUL, 0x004a383e9f74d68aUL) /* 883 */ +P( 4, 0xdac4d592e777c647UL, 0x0049e28fbabb9940UL) /* 887 */ +P(20, 0xa63ea8c8f61f0c23UL, 0x0048417b57c78cd7UL) /* 907 */ +P( 4, 0xe476062ea5cbbb6fUL, 0x0047f043713f3a2bUL) /* 911 */ +P( 8, 0xdf68761c69daac27UL, 0x00474ff2a10281cfUL) /* 919 */ +P(10, 0xb813d737637aa061UL, 0x00468b6f9a978f91UL) /* 929 */ +P( 8, 0xa3a77aac1fb15099UL, 0x0045f13f1caff2e2UL) /* 937 */ +P( 4, 0x17f0c3e0712c5825UL, 0x0045a5228cec23e9UL) /* 941 */ +P( 6, 0xfd912a70ff30637bUL, 0x0045342c556c66b9UL) /* 947 */ +P( 6, 0xfbb3b5dc01131289UL, 0x0044c4a23feeced7UL) /* 953 */ +P(14, 0x856d560a0f5acdf7UL, 0x0043c5c20d3c9fe6UL) /* 967 */ +P( 4, 0x96472f314d3f89e3UL, 0x00437e494b239798UL) /* 971 */ +P( 6, 0xa76f5c7ed2253531UL, 0x0043142d118e47cbUL) /* 977 */ +P( 6, 0x816eae7c7bf69fe7UL, 0x0042ab5c73a13458UL) /* 983 */ +P( 8, 0xb6a2bea4cfb1781fUL, 0x004221950db0f3dbUL) /* 991 */ +P( 6, 0xa3900c53318e81edUL, 0x0041bbb2f80a4553UL) /* 997 */ +P(12, 0x60aa7f5d9f148d11UL, 0x0040f391612c6680UL) /* 1009 */ +P( 4, 0x6be8c0102c7a505dUL, 0x0040b1e94173fefdUL) /* 1013 */ +P( 6, 0x8ff3f0ed28728f33UL, 0x004050647d9d0445UL) /* 1019 */ +P( 2, 0x680e0a87e5ec7155UL, 0x004030241b144f3bUL) /* 1021 */ +P(10, 0xbbf70fa49fe829b7UL, 0x003f90c2ab542cb1UL) /* 1031 */ +P( 2, 0xd69d1e7b6a50ca39UL, 0x003f71412d59f597UL) /* 1033 */ +P( 6, 0x1a1e0f46b6d26aefUL, 0x003f137701b98841UL) /* 1039 */ +P(10, 0x7429f9a7a8251829UL, 0x003e79886b60e278UL) /* 1049 */ +P( 2, 0xd9c2219d1b863613UL, 0x003e5b1916a7181dUL) /* 1051 */ +P(10, 0x91406c1820d077adUL, 0x003dc4a50968f524UL) /* 1061 */ +P( 2, 0x521f4ec02e3d2b97UL, 0x003da6e4c9550321UL) /* 1063 */ +P( 6, 0xbb8283b63dc8eba5UL, 0x003d4e4f06f1def3UL) /* 1069 */ +P(18, 0x431eda153229ebbfUL, 0x003c4a6bdd24f9a4UL) /* 1087 */ +P( 4, 0xaf0bf78d7e01686bUL, 0x003c11d54b525c73UL) /* 1091 */ +P( 2, 0xa9ced0742c086e8dUL, 0x003bf5b1c5721065UL) /* 1093 */ +P( 4, 0xc26458ad9f632df9UL, 0x003bbdb9862f23b4UL) /* 1097 */ +P( 6, 0xbbff1255dff892afUL, 0x003b6a8801db5440UL) /* 1103 */ +P( 6, 0xcbd49a333f04d8fdUL, 0x003b183cf0fed886UL) /* 1109 */ +P( 8, 0xec84ed6f9cfdeff5UL, 0x003aabe394bdc3f4UL) /* 1117 */ +P( 6, 0x97980cc40bda9d4bUL, 0x003a5ba3e76156daUL) /* 1123 */ +P( 6, 0x777f34d524f5cbd9UL, 0x003a0c3e953378dbUL) /* 1129 */ +P(22, 0x2797051d94cbbb7fUL, 0x0038f03561320b1eUL) /* 1151 */ +P( 2, 0xea769051b4f43b81UL, 0x0038d6ecaef5908aUL) /* 1153 */ +P(10, 0xce7910f3034d4323UL, 0x003859cf221e6069UL) /* 1163 */ +P( 8, 0x92791d1374f5b99bUL, 0x0037f7415dc9588aUL) /* 1171 */ +P(10, 0x89a5645cc68ea1b5UL, 0x00377df0d3902626UL) /* 1181 */ +P( 6, 0x5f8aacf796c0cf0bUL, 0x00373622136907faUL) /* 1187 */ +P( 6, 0xf2e90a15e33edf99UL, 0x0036ef0c3b39b92fUL) /* 1193 */ +P( 8, 0x8e99e5feb897c451UL, 0x0036915f47d55e6dUL) /* 1201 */ +P(12, 0xaca2eda38fb91695UL, 0x0036072cf3f866fdUL) /* 1213 */ +P( 4, 0x5d9b737be5ea8b41UL, 0x0035d9b737be5ea8UL) /* 1217 */ +P( 6, 0x4aefe1db93fd7cf7UL, 0x0035961559cc81c7UL) /* 1223 */ +P( 6, 0xa0994ef20b3f8805UL, 0x0035531c897a4592UL) /* 1229 */ +P( 2, 0x103890bda912822fUL, 0x00353ceebd3e98a4UL) /* 1231 */ +P( 6, 0xb441659d13a9147dUL, 0x0034fad381585e5eUL) /* 1237 */ +P(12, 0x1e2134440c4c3f21UL, 0x00347884d1103130UL) /* 1249 */ +P(10, 0x263a27727a6883c3UL, 0x00340dd3ac39bf56UL) /* 1259 */ +P(18, 0x78e221472ab33855UL, 0x003351fdfecc140cUL) /* 1277 */ +P( 2, 0x95eac88e82e6faffUL, 0x00333d72b089b524UL) /* 1279 */ +P( 4, 0xf66c258317be8dabUL, 0x0033148d44d6b261UL) /* 1283 */ +P( 6, 0x09ee202c7cb91939UL, 0x0032d7aef8412458UL) /* 1289 */ +P( 2, 0x8d2fca1042a09ea3UL, 0x0032c3850e79c0f1UL) /* 1291 */ +P( 6, 0x82779c856d8b8bf1UL, 0x00328766d59048a2UL) /* 1297 */ +P( 4, 0x3879361cba8a223dUL, 0x00325fa18cb11833UL) /* 1301 */ +P( 2, 0xf23f43639c3182a7UL, 0x00324bd659327e22UL) /* 1303 */ +P( 4, 0xa03868fc474bcd13UL, 0x0032246e784360f4UL) /* 1307 */ +P(12, 0x651e78b8c5311a97UL, 0x0031afa5f1a33a08UL) /* 1319 */ +P( 2, 0x8ffce639c00c6719UL, 0x00319c63ff398e70UL) /* 1321 */ +P( 6, 0xf7b460754b0b61cfUL, 0x003162f7519a86a7UL) /* 1327 */ +P(34, 0x7b03f3359b8e63b1UL, 0x0030271fc9d3fc3cUL) /* 1361 */ +P( 6, 0xa55c5326041eb667UL, 0x002ff104ae89750bUL) /* 1367 */ +P( 6, 0x647f88ab896a76f5UL, 0x002fbb62a236d133UL) /* 1373 */ +P( 8, 0x8fd971434a55a46dUL, 0x002f74997d2070b4UL) /* 1381 */ +P(18, 0x9fbf969958046447UL, 0x002ed84aa8b6fce3UL) /* 1399 */ +P(10, 0x9986feba69be3a81UL, 0x002e832df7a46dbdUL) /* 1409 */ +P(14, 0xa668b3e6d053796fUL, 0x002e0e0846857cabUL) /* 1423 */ +P( 4, 0x97694e6589f4e09bUL, 0x002decfbdfb55ee6UL) /* 1427 */ +P( 2, 0x37890c00b7721dbdUL, 0x002ddc876f3ff488UL) /* 1429 */ +P( 4, 0x5ac094a235f37ea9UL, 0x002dbbc1d4c482c4UL) /* 1433 */ +P( 6, 0x31cff775f2d5d65fUL, 0x002d8af0e0de0556UL) /* 1439 */ +P( 8, 0xddad8e6b36505217UL, 0x002d4a7b7d14b30aUL) /* 1447 */ +P( 4, 0x5a27df897062cd03UL, 0x002d2a85073bcf4eUL) /* 1451 */ +P( 2, 0xe2396fe0fdb5a625UL, 0x002d1a9ab13e8be4UL) /* 1453 */ +P( 6, 0xb352a4957e82317bUL, 0x002ceb1eb4b9fd8bUL) /* 1459 */ +P(12, 0xd8ab3f2c60c2ea3fUL, 0x002c8d503a79794cUL) /* 1471 */ +P(10, 0x6893f702f0452479UL, 0x002c404d708784edUL) /* 1481 */ +P( 2, 0x9686fdc182acf7e3UL, 0x002c31066315ec52UL) /* 1483 */ +P( 4, 0x6854037173dce12fUL, 0x002c1297d80f2664UL) /* 1487 */ +P( 2, 0x7f0ded1685c27331UL, 0x002c037044c55f6bUL) /* 1489 */ +P( 4, 0xeeda72e1fe490b7dUL, 0x002be5404cd13086UL) /* 1493 */ +P( 6, 0x9e7bfc959a8e6e53UL, 0x002bb845adaf0cceUL) /* 1499 */ +P(12, 0x49b314d6d4753dd7UL, 0x002b5f62c639f16dUL) /* 1511 */ +P(12, 0x2e8f8c5ac4aa1b3bUL, 0x002b07e6734f2b88UL) /* 1523 */ +P( 8, 0xb8ef723481163d33UL, 0x002ace569d8342b7UL) /* 1531 */ +P(12, 0x6a2ec96a594287b7UL, 0x002a791d5dbd4dcfUL) /* 1543 */ +P( 6, 0xdba41c6d13aab8c5UL, 0x002a4eff8113017cUL) /* 1549 */ +P( 4, 0xc2adbe648dc3aaf1UL, 0x002a3319e156df32UL) /* 1553 */ +P( 6, 0x87a2bade565f91a7UL, 0x002a0986286526eaUL) /* 1559 */ +P( 8, 0x4d6fe8798c01f5dfUL, 0x0029d29551d91e39UL) /* 1567 */ +P( 4, 0x3791310c8c23d98bUL, 0x0029b7529e109f0aUL) /* 1571 */ +P( 8, 0xf80e446b01228883UL, 0x00298137491ea465UL) /* 1579 */ +P( 4, 0x9aed1436fbf500cfUL, 0x0029665e1eb9f9daUL) /* 1583 */ +P(14, 0x7839b54cc8b24115UL, 0x002909752e019a5eUL) /* 1597 */ +P( 4, 0xc128c646ad0309c1UL, 0x0028ef35e2e5efb0UL) /* 1601 */ +P( 6, 0x14de631624a3c377UL, 0x0028c815aa4b8278UL) /* 1607 */ +P( 2, 0x3f7b9fe68b0ecbf9UL, 0x0028bb1b867199daUL) /* 1609 */ +P( 4, 0x284ffd75ec00a285UL, 0x0028a13ff5d7b002UL) /* 1613 */ +P( 6, 0x37803cb80dea2ddbUL, 0x00287ab3f173e755UL) /* 1619 */ +P( 2, 0x86b63f7c9ac4c6fdUL, 0x00286dead67713bdUL) /* 1621 */ +P( 6, 0x8b6851d1bd99b9d3UL, 0x002847bfcda6503eUL) /* 1627 */ +P(10, 0xb62fda77ca343b6dUL, 0x002808c1ea6b4777UL) /* 1637 */ +P(20, 0x1f0dc009e34383c9UL, 0x00278d0e0f23ff61UL) /* 1657 */ +P( 6, 0x496dc21ddd35b97fUL, 0x002768863c093c7fUL) /* 1663 */ +P( 4, 0xb0e96ce17090f82bUL, 0x0027505115a73ca8UL) /* 1667 */ +P( 2, 0xaadf05acdd7d024dUL, 0x00274441a61dc1b9UL) /* 1669 */ +P(24, 0xcb138196746eafb5UL, 0x0026b5c166113cf0UL) /* 1693 */ +P( 4, 0x347f523736755d61UL, 0x00269e65ad07b18eUL) /* 1697 */ +P( 2, 0xd14a48a051f7dd0bUL, 0x002692c25f877560UL) /* 1699 */ +P(10, 0x474d71b1ce914d25UL, 0x002658fa7523cd11UL) /* 1709 */ +P(12, 0x386063f5e28c1f89UL, 0x0026148710cf0f9eUL) /* 1721 */ +P( 2, 0x1db7325e32d04e73UL, 0x002609363b22524fUL) /* 1723 */ +P(10, 0xfef748d3893b880dUL, 0x0025d1065a1c1122UL) /* 1733 */ +P( 8, 0x2f3351506e935605UL, 0x0025a48a382b863fUL) /* 1741 */ +P( 6, 0x7a3637fa2376415bUL, 0x0025837190eccdbcUL) /* 1747 */ +P( 6, 0x4ac525d2baa21969UL, 0x00256292e95d510cUL) /* 1753 */ +P( 6, 0x3a11c16b42cd351fUL, 0x002541eda98d068cUL) /* 1759 */ +P(18, 0x6c7abde0049c2a11UL, 0x0024e15087fed8f5UL) /* 1777 */ +P( 6, 0x54dad0303e069ac7UL, 0x0024c18b20979e5dUL) /* 1783 */ +P( 4, 0xebf1ac9fdfe91433UL, 0x0024ac7b336de0c5UL) /* 1787 */ +P( 2, 0xfafdda8237cec655UL, 0x0024a1fc478c60bbUL) /* 1789 */ +P(12, 0xdce3ff6e71ffb739UL, 0x002463801231c009UL) /* 1801 */ +P(10, 0xbed5737d6286db1bUL, 0x0024300fd506ed33UL) /* 1811 */ +P(12, 0xe479e431fe08b4dfUL, 0x0023f314a494da81UL) /* 1823 */ +P( 8, 0x9dd9b0dd7742f897UL, 0x0023cadedd2fad3aUL) /* 1831 */ +P(16, 0x8f09d7402c5a5e87UL, 0x00237b7ed2664a03UL) /* 1847 */ +P(14, 0x9216d5c4d958738dUL, 0x0023372967dbaf1dUL) /* 1861 */ +P( 6, 0xb3139ba11d34ca63UL, 0x00231a308a371f20UL) /* 1867 */ +P( 4, 0x47d54f7ed644afafUL, 0x002306fa63e1e600UL) /* 1871 */ +P( 2, 0x92a81d85cf11a1b1UL, 0x0022fd6731575684UL) /* 1873 */ +P( 4, 0x754b26533253bdfdUL, 0x0022ea507805749cUL) /* 1877 */ +P( 2, 0xbbe0efc980bfd467UL, 0x0022e0cce8b3d720UL) /* 1879 */ +P(10, 0xc0d8d594f024dca1UL, 0x0022b1887857d161UL) /* 1889 */ +P(12, 0x8238d43bcaac1a65UL, 0x00227977fcc49cc0UL) /* 1901 */ +P( 6, 0x27779c1fae6175bbUL, 0x00225db37b5e5f4fUL) /* 1907 */ +P( 6, 0xa746ca9af708b2c9UL, 0x0022421b91322ed6UL) /* 1913 */ +P(18, 0x93f3cd9f389be823UL, 0x0021f05b35f52102UL) /* 1931 */ +P( 2, 0x5cb4a4c04c489345UL, 0x0021e75de5c70d60UL) /* 1933 */ +P(16, 0xbf6047743e85b6b5UL, 0x0021a01d6c19be96UL) /* 1949 */ +P( 2, 0x61c147831563545fUL, 0x0021974a6615c81aUL) /* 1951 */ +P(22, 0xedb47c0ae62dee9dUL, 0x00213767697cf36aUL) /* 1973 */ +P( 6, 0x0a3824386673a573UL, 0x00211d9f7fad35f1UL) /* 1979 */ +P( 8, 0xa4a77d19e575a0ebUL, 0x0020fb7d9dd36c18UL) /* 1987 */ +P( 6, 0xa2bee045e066c279UL, 0x0020e2123d661e0eUL) /* 1993 */ +P( 4, 0xc23618de8ab43d05UL, 0x0020d135b66ae990UL) /* 1997 */ +P( 2, 0x266b515216cb9f2fUL, 0x0020c8cded4d7a8eUL) /* 1999 */ +P( 4, 0xe279edd9e9c2e85bUL, 0x0020b80b3f43ddbfUL) /* 2003 */ +P( 8, 0xd0c591c221dc9c53UL, 0x002096b9180f46a6UL) /* 2011 */ +P( 6, 0x06da8ee9c9ee7c21UL, 0x00207de7e28de5daUL) /* 2017 */ +P(10, 0x9dfebcaf4c27e8c3UL, 0x002054dec8cf1fb3UL) /* 2027 */ +P( 2, 0x49aeff9f19dd6de5UL, 0x00204cb630b3aab5UL) /* 2029 */ +P(10, 0x86976a57a296e9c7UL, 0x00202428adc37bebUL) /* 2039 */ +P(14, 0xa3b9abf4872b84cdUL, 0x001fec0c7834def4UL) /* 2053 */ +P(10, 0x34fca6483895e6efUL, 0x001fc46fae98a1d0UL) /* 2063 */ +P( 6, 0x34b5a333988f873dUL, 0x001facda430ff619UL) /* 2069 */ +P(12, 0xd9dd4f19b5f17be1UL, 0x001f7e17dd8e15e5UL) /* 2081 */ +P( 2, 0xb935b507fd0ce78bUL, 0x001f765a3556a4eeUL) /* 2083 */ +P( 4, 0xb450f5540660e797UL, 0x001f66ea49d802f1UL) /* 2087 */ +P( 2, 0x63ff82831ffc1419UL, 0x001f5f3800faf9c0UL) /* 2089 */ +P(10, 0x8992f718c22a32fbUL, 0x001f38f4e6c0f1f9UL) /* 2099 */ +P(12, 0x5f3253ad0d37e7bfUL, 0x001f0b8546752578UL) /* 2111 */ +P( 2, 0x007c0ffe0fc007c1UL, 0x001f03ff83f001f0UL) /* 2113 */ +P(16, 0x4d8ebadc0c0640b1UL, 0x001ec853b0a3883cUL) /* 2129 */ +P( 2, 0xe2729af831037bdbUL, 0x001ec0ee573723ebUL) /* 2131 */ +P( 6, 0xb8f64bf30feebfe9UL, 0x001eaad38e6f6894UL) /* 2137 */ +P( 4, 0xda93124b544c0bf5UL, 0x001e9c28a765fe53UL) /* 2141 */ +P( 2, 0x9cf7ff0b593c539fUL, 0x001e94d8758c2003UL) /* 2143 */ +P(10, 0xd6bd8861fa0e07d9UL, 0x001e707ba8f65e68UL) /* 2153 */ +P( 8, 0x5cfe75c0bd8ab891UL, 0x001e53a2a68f574eUL) /* 2161 */ +P(18, 0x43e808757c2e862bUL, 0x001e1380a56b438dUL) /* 2179 */ +P(24, 0x90caa96d595c9d93UL, 0x001dbf9f513a3802UL) /* 2203 */ +P( 4, 0x8fd550625d07135fUL, 0x001db1d1d58bc600UL) /* 2207 */ +P( 6, 0x76b010a86e209f2dUL, 0x001d9d358f53de38UL) /* 2213 */ +P( 8, 0xecc0426447769b25UL, 0x001d81e6df6165c7UL) /* 2221 */ +P(16, 0xe381339caabe3295UL, 0x001d4bdf7fd40e30UL) /* 2237 */ +P( 2, 0xd1b190a2d0c7673fUL, 0x001d452c7a1c958dUL) /* 2239 */ +P( 4, 0xc3bce3cf26b0e7ebUL, 0x001d37cf9b902659UL) /* 2243 */ +P( 8, 0x5f87e76f56c61ce3UL, 0x001d1d3a5791e97bUL) /* 2251 */ +P(16, 0xc06c6857a124b353UL, 0x001ce89fe6b47416UL) /* 2267 */ +P( 2, 0x38c040fcba630f75UL, 0x001ce219f3235071UL) /* 2269 */ +P( 4, 0xd078bc4fbd533b21UL, 0x001cd516dcf92139UL) /* 2273 */ +P( 8, 0xde8e15c5dd354f59UL, 0x001cbb33bd1c2b8bUL) /* 2281 */ +P( 6, 0xca61d53d7414260fUL, 0x001ca7e7d2546688UL) /* 2287 */ +P( 6, 0xb56bf5ba8eae635dUL, 0x001c94b5c1b3dbd3UL) /* 2293 */ +P( 4, 0x44a72cb0fb6e3949UL, 0x001c87f7f9c241c1UL) /* 2297 */ +P(12, 0x879839a714f45bcdUL, 0x001c6202706c35a9UL) /* 2309 */ +P( 2, 0x02a8994fde5314b7UL, 0x001c5bb8a9437632UL) /* 2311 */ +P(22, 0xb971920cf2b90135UL, 0x001c174343b4111eUL) /* 2333 */ +P( 6, 0x8a8fd0b7df9a6e8bUL, 0x001c04d0d3e46b42UL) /* 2339 */ +P( 2, 0xb31f9a84c1c6eaadUL, 0x001bfeb00fbf4308UL) /* 2341 */ +P( 6, 0x92293b02823c6d83UL, 0x001bec5dce0b202dUL) /* 2347 */ +P( 4, 0xeee77ff20fe5ddcfUL, 0x001be03444620037UL) /* 2351 */ +P( 6, 0x0e1ea0f6c496c11dUL, 0x001bce09c66f6fc3UL) /* 2357 */ +P(14, 0xfdf2d3d6f88ccb6bUL, 0x001ba40228d02b30UL) /* 2371 */ +P( 6, 0xfa9d74a3457738f9UL, 0x001b9225b1cf8919UL) /* 2377 */ +P( 4, 0xefc3ca3db71a5785UL, 0x001b864a2ff3f53fUL) /* 2381 */ +P( 2, 0x8e2071718d0d6dafUL, 0x001b80604150e49bUL) /* 2383 */ +P( 6, 0xbc0fdbfeb6cfabfdUL, 0x001b6eb1aaeaacf3UL) /* 2389 */ +P( 4, 0x1eeab613e5e5aee9UL, 0x001b62f48da3c8ccUL) /* 2393 */ +P( 6, 0x2d2388e90e9e929fUL, 0x001b516babe96092UL) /* 2399 */ +P(12, 0x81dbafba588ddb43UL, 0x001b2e9cef1e0c87UL) /* 2411 */ +P( 6, 0x52eebc51c4799791UL, 0x001b1d56bedc849bUL) /* 2417 */ +P( 6, 0x1c6bc4693b45a047UL, 0x001b0c267546aec0UL) /* 2423 */ +P(14, 0x06eee0974498874dUL, 0x001ae45f62024fa0UL) /* 2437 */ +P( 4, 0xd85b7377a9953cb9UL, 0x001ad917631b5f54UL) /* 2441 */ +P( 6, 0x4b6df412d4caf56fUL, 0x001ac83d18cb608fUL) /* 2447 */ +P(12, 0x6b8afbbb4a053493UL, 0x001aa6c7ad8c063fUL) /* 2459 */ +P( 8, 0xcc5299c96ac7720bUL, 0x001a90a7b1228e2aUL) /* 2467 */ +P( 6, 0xadce84b5c710aa99UL, 0x001a8027c03ba059UL) /* 2473 */ +P( 4, 0x9d673f5aa3804225UL, 0x001a7533289deb89UL) /* 2477 */ +P(26, 0xe6541268efbce7f7UL, 0x001a2ed7ce16b49fUL) /* 2503 */ +P(18, 0xfcf41e76cf5be669UL, 0x0019fefc0a279a73UL) /* 2521 */ +P(10, 0x5c3eb5dc31c383cbUL, 0x0019e4b0cd873b5fUL) /* 2531 */ +P( 8, 0x301832d11d8ad6c3UL, 0x0019cfcdfd60e514UL) /* 2539 */ +P( 4, 0x2e9c0942f1ce450fUL, 0x0019c56932d66c85UL) /* 2543 */ +P( 6, 0x97f3f2be37a39a5dUL, 0x0019b5e1ab6fc7c2UL) /* 2549 */ +P( 2, 0xe8b7d8a9654187c7UL, 0x0019b0b8a62f2a73UL) /* 2551 */ +P( 6, 0xb5d024d7da5b1b55UL, 0x0019a149fc98942cUL) /* 2557 */ +P(22, 0xb8ba9d6e7ae3501bUL, 0x001969517ec25b85UL) /* 2579 */ +P(12, 0xf50865f71b90f1dfUL, 0x00194b3083360ba8UL) /* 2591 */ +P( 2, 0x739c1682847df9e1UL, 0x00194631f4bebdc1UL) /* 2593 */ +P(16, 0xc470a4d842b90ed1UL, 0x00191e84127268fdUL) /* 2609 */ +P( 8, 0x1fb1be11698cc409UL, 0x00190adbb543984fUL) /* 2617 */ +P( 4, 0xd8d5512a7cd35d15UL, 0x001901130bd18200UL) /* 2621 */ +P(12, 0xa5496821723e07f9UL, 0x0018e3e6b889ac94UL) /* 2633 */ +P(14, 0xbcc8c6d7abaa8167UL, 0x0018c233420e1ec1UL) /* 2647 */ +P(10, 0x52c396c95eb619a1UL, 0x0018aa5872d92bd6UL) /* 2657 */ +P( 2, 0x6eb7e380878ec74bUL, 0x0018a5989945ccf9UL) /* 2659 */ +P( 4, 0x3d5513b504537157UL, 0x00189c1e60b57f60UL) /* 2663 */ +P( 8, 0x314391f8862e948fUL, 0x0018893fbc8690b9UL) /* 2671 */ +P( 6, 0xdc0b17cfcd81f5ddUL, 0x00187b2bb3e1041cUL) /* 2677 */ +P( 6, 0x2f6bea3ec89044b3UL, 0x00186d27c9cdcfb8UL) /* 2683 */ +P( 4, 0xce13a05869f1b57fUL, 0x001863d8bf4f2c1cUL) /* 2687 */ +P( 2, 0x7593474e8ace3581UL, 0x00185f33e2ad7593UL) /* 2689 */ +P( 4, 0x07fc329295a05e4dUL, 0x001855ef75973e13UL) /* 2693 */ +P( 6, 0xb05377cba4908d23UL, 0x001848160153f134UL) /* 2699 */ +P( 8, 0xe7b2131a628aa39bUL, 0x001835b72e6f0656UL) /* 2707 */ +P( 4, 0x9031dbed7de01527UL, 0x00182c922d83eb39UL) /* 2711 */ +P( 2, 0x76844b1c670aa9a9UL, 0x0018280243c0365aUL) /* 2713 */ +P( 6, 0x6a03f4533b08915fUL, 0x00181a5cd5898e73UL) /* 2719 */ +P(10, 0x1dbca579db0a3999UL, 0x001803c0961773aaUL) /* 2729 */ +P( 2, 0x002ffe800bffa003UL, 0x0017ff4005ffd001UL) /* 2731 */ +P(10, 0x478ab1a3e936139dUL, 0x0017e8d670433edbUL) /* 2741 */ +P( 8, 0x66e722bc4c5cc095UL, 0x0017d7066cf4bb5dUL) /* 2749 */ +P( 4, 0x7a8f63c717278541UL, 0x0017ce285b806b1fUL) /* 2753 */ +P(14, 0xdf6eee24d292bc2fUL, 0x0017af52cdf27e02UL) /* 2767 */ +P(10, 0x9fc20d17237dd569UL, 0x0017997d47d01039UL) /* 2777 */ +P(12, 0xcdf9932356bda2edUL, 0x00177f7ec2c6d0baUL) /* 2789 */ +P( 2, 0x97b5e332e80f68d7UL, 0x00177b2f3cd00756UL) /* 2791 */ +P( 6, 0x46eee26fd875e2e5UL, 0x00176e4a22f692a0UL) /* 2797 */ +P( 4, 0x3548a8e65157a611UL, 0x001765b94271e11bUL) /* 2801 */ +P( 2, 0xc288d03be9b71e3bUL, 0x001761732b044ae4UL) /* 2803 */ +P(16, 0x8151186db38937abUL, 0x00173f7a5300a2bcUL) /* 2819 */ +P(14, 0x7800b910895a45f1UL, 0x001722112b48be1fUL) /* 2833 */ +P( 4, 0xaee0b024182eec3dUL, 0x001719b7a16eb843UL) /* 2837 */ +P( 6, 0x96323eda173b5713UL, 0x00170d3c99cc5052UL) /* 2843 */ +P( 8, 0x0ed0dbd03ae77c8bUL, 0x0016fcad7aed3bb6UL) /* 2851 */ +P( 6, 0xf73800b7828dc119UL, 0x0016f051b8231ffdUL) /* 2857 */ +P( 4, 0x1b61715ec22b7ca5UL, 0x0016e81beae20643UL) /* 2861 */ +P(18, 0xa8533a991ead64bfUL, 0x0016c3721584c1d8UL) /* 2879 */ +P( 8, 0x7f6c7290e46c2e77UL, 0x0016b34c2ba09663UL) /* 2887 */ +P(10, 0x6325e8d907b01db1UL, 0x00169f3ce292ddcdUL) /* 2897 */ +P( 6, 0x28909f70152a1067UL, 0x00169344b2220a0dUL) /* 2903 */ +P( 6, 0xea7077af0997a0f5UL, 0x001687592593c1b1UL) /* 2909 */ +P( 8, 0x7e605cad10c32e6dUL, 0x00167787f1418ec9UL) /* 2917 */ +P(10, 0x471b33570635b38fUL, 0x001663e190395ff2UL) /* 2927 */ +P(12, 0xab559fa997a61bb3UL, 0x00164c7a4b6eb5b3UL) /* 2939 */ +P(14, 0xad4bdae562bddab9UL, 0x0016316a061182fdUL) /* 2953 */ +P( 4, 0x055e1b2f2ed62f45UL, 0x001629ba914584e4UL) /* 2957 */ +P( 6, 0x03cd328b1a2dca9bUL, 0x00161e3d57de21b2UL) /* 2963 */ +P( 6, 0xd28f4e08733218a9UL, 0x001612cc01b977f0UL) /* 2969 */ +P( 2, 0xb6800b077f186293UL, 0x00160efe30c525ffUL) /* 2971 */ +P(28, 0x6fbd138c3fd9c207UL, 0x0015da45249ec5deUL) /* 2999 */ +P( 2, 0xb117ccd12ae88a89UL, 0x0015d68ab4acff92UL) /* 3001 */ +P(10, 0x2f1a1a044046bcebUL, 0x0015c3f989d1eb15UL) /* 3011 */ +P( 8, 0x548aba0b060541e3UL, 0x0015b535ad11b8f0UL) /* 3019 */ +P( 4, 0xcf4e808cea111b2fUL, 0x0015addb3f424ec1UL) /* 3023 */ +P(14, 0xdbec1b4fa855a475UL, 0x00159445cb91be6bUL) /* 3037 */ +P( 4, 0xe3f794eb600d7821UL, 0x00158d0199771e63UL) /* 3041 */ +P( 8, 0x34fae0d9a11f7c59UL, 0x00157e87d9b69e04UL) /* 3049 */ +P(12, 0xf006b0ccbbac085dUL, 0x001568f58bc01ac3UL) /* 3061 */ +P( 6, 0x3f45076dc3114733UL, 0x00155e3c993fda9bUL) /* 3067 */ +P(12, 0xeef49bfa58a1a1b7UL, 0x001548eacc5e1e6eUL) /* 3079 */ +P( 4, 0x12c4218bea691fa3UL, 0x001541d8f91ba6a7UL) /* 3083 */ +P( 6, 0xbc7504e3bd5e64f1UL, 0x00153747060cc340UL) /* 3089 */ +P(20, 0x4ee21c292bb92fadUL, 0x001514569f93f7c4UL) /* 3109 */ +P(10, 0x34338b7327a4bacfUL, 0x00150309705d3d79UL) /* 3119 */ +P( 2, 0x3fe5c0833d6fccd1UL, 0x0014ff97020cf5bfUL) /* 3121 */ +P(16, 0xb1e70743535203c1UL, 0x0014e42c114cf47eUL) /* 3137 */ +P(26, 0xefbb5dcdfb4e43d3UL, 0x0014b835bdcb6447UL) /* 3163 */ +P( 4, 0xca68467ca5394f9fUL, 0x0014b182b53a9ab7UL) /* 3167 */ +P( 2, 0x8c51c081408b97a1UL, 0x0014ae2ad094a3d3UL) /* 3169 */ +P(12, 0x3275a899dfa5dd65UL, 0x00149a320ea59f96UL) /* 3181 */ +P( 6, 0x9e674cb62e1b78bbUL, 0x001490441de1a2fbUL) /* 3187 */ +P( 4, 0xa37ff5bb2a998d47UL, 0x001489aacce57200UL) /* 3191 */ +P(12, 0x792a999db131a22bUL, 0x001475f82ad6ff99UL) /* 3203 */ +P( 6, 0x1b48841bc30d29b9UL, 0x00146c2cfe53204fUL) /* 3209 */ +P( 8, 0xf06721d2011d3471UL, 0x00145f2ca490d4a1UL) /* 3217 */ +P( 4, 0x93fd2386dff85ebdUL, 0x001458b2aae0ec87UL) /* 3221 */ +P( 8, 0x4ce72f54c07ed9b5UL, 0x00144bcb0a3a3150UL) /* 3229 */ +P(22, 0xd6d0fd3e71dd827bUL, 0x001428a1e65441d4UL) /* 3251 */ +P( 2, 0x856405fb1eed819dUL, 0x00142575a6c210d7UL) /* 3253 */ +P( 4, 0x8ea8aceb7c443989UL, 0x00141f2025ba5c46UL) /* 3257 */ +P( 2, 0x34a13026f62e5873UL, 0x00141bf6e35420fdUL) /* 3259 */ +P(12, 0x1eea0208ec0af4f7UL, 0x001409141d1d313aUL) /* 3271 */ +P(28, 0x63679853cea598cbUL, 0x0013dd8bc19c3513UL) /* 3299 */ +P( 2, 0xc30b3ebd61f2d0edUL, 0x0013da76f714dc8fUL) /* 3301 */ +P( 6, 0x7eb9037bc7f43bc3UL, 0x0013d13e50f8f49eUL) /* 3307 */ +P( 6, 0xa583e6f6ce016411UL, 0x0013c80e37ca3819UL) /* 3313 */ +P( 6, 0xf1938d895f1a74c7UL, 0x0013bee69fa99ccfUL) /* 3319 */ +P( 4, 0x80cf1491c1e81e33UL, 0x0013b8d0ede55835UL) /* 3323 */ +P( 6, 0x3c0f12886ba8f301UL, 0x0013afb7680bb054UL) /* 3329 */ +P( 2, 0x0e4b786e0dfcc5abUL, 0x0013acb0c3841c96UL) /* 3331 */ +P(12, 0x672684c93f2d41efUL, 0x00139a9c5f434fdeUL) /* 3343 */ +P( 4, 0xe00757badb35c51bUL, 0x0013949cf33a0d9dUL) /* 3347 */ +P(12, 0xd6d84afe66472edfUL, 0x001382b4a00c31b0UL) /* 3359 */ +P( 2, 0xfbbc0eedcbbfb6e1UL, 0x00137fbbc0eedcbbUL) /* 3361 */ +P(10, 0x250f43aa08a84983UL, 0x001370ecf047b069UL) /* 3371 */ +P( 2, 0x04400e927b1acaa5UL, 0x00136df9790e3155UL) /* 3373 */ +P(16, 0x56572be34b9d3215UL, 0x0013567dd8defd5bUL) /* 3389 */ +P( 2, 0x87964ef7781c62bfUL, 0x0013539261fdbc34UL) /* 3391 */ +P(16, 0x29ed84051c06e9afUL, 0x00133c564292d28aUL) /* 3407 */ +P( 6, 0xb00acd11ed3f87fdUL, 0x001333ae178d6388UL) /* 3413 */ +P(20, 0x06307881744152d9UL, 0x0013170ad00d1fd7UL) /* 3433 */ +P(16, 0x7a786459f5c1ccc9UL, 0x0013005f01db0947UL) /* 3449 */ +P( 8, 0x1308125d74563281UL, 0x0012f51d40342210UL) /* 3457 */ +P( 4, 0x395310a480b3e34dUL, 0x0012ef815e4ed950UL) /* 3461 */ +P( 2, 0x35985baa8b202837UL, 0x0012ecb4abccd827UL) /* 3463 */ +P( 4, 0x96304a6e052b3223UL, 0x0012e71dc1d3d820UL) /* 3467 */ +P( 2, 0xbd8265fc9af8fd45UL, 0x0012e45389a16495UL) /* 3469 */ +P(22, 0x1b6d0b383ec58e0bUL, 0x0012c5d9226476ccUL) /* 3491 */ +P( 8, 0xc21a7c3b68b28503UL, 0x0012badc391156fdUL) /* 3499 */ +P(12, 0x236fa180fbfd6007UL, 0x0012aa78e412f522UL) /* 3511 */ +P( 6, 0xc42accd440ed9595UL, 0x0012a251f5f47fd1UL) /* 3517 */ +P(10, 0x7acf7128236ba3f7UL, 0x001294cb85c53534UL) /* 3527 */ +P( 2, 0xf909367a987b9c79UL, 0x0012921963beb65eUL) /* 3529 */ +P( 4, 0xb64efb252bfba705UL, 0x00128cb777c69ca8UL) /* 3533 */ +P( 6, 0x980d4f5a7e4cd25bUL, 0x001284aa6cf07294UL) /* 3539 */ +P( 2, 0xe1ecc4ef27b0c37dUL, 0x001281fcf6ac7f87UL) /* 3541 */ +P( 6, 0x9111aebb81d72653UL, 0x001279f937367db9UL) /* 3547 */ +P(10, 0x8951f985cb2c67edUL, 0x00126cad0488be94UL) /* 3557 */ +P( 2, 0xc439d4fc54e0b5d7UL, 0x00126a06794646a2UL) /* 3559 */ +P(12, 0xe857bf31896d533bUL, 0x00125a2f2bcd3e95UL) /* 3571 */ +P(10, 0xb614bb4cb5023755UL, 0x00124d108389e6b1UL) /* 3581 */ +P( 2, 0x938a89e5473bf1ffUL, 0x00124a73083771acUL) /* 3583 */ +P(10, 0xeac481aca34de039UL, 0x00123d6acda0620aUL) /* 3593 */ +P(14, 0x14b961badf4809a7UL, 0x00122b4b2917eafdUL) /* 3607 */ +P( 6, 0x76784fecba352435UL, 0x00122391bfce1e2fUL) /* 3613 */ +P( 4, 0xefa689bb58aef5e1UL, 0x00121e6f1ea579f2UL) /* 3617 */ +P( 6, 0xb2b2c4db9c3a8197UL, 0x001216c09e471568UL) /* 3623 */ +P( 8, 0x2503bc992279f8cfUL, 0x00120c8cb9d93909UL) /* 3631 */ +P( 6, 0xd2ab9aec5ca1541dUL, 0x001204ed58e64ef9UL) /* 3637 */ +P( 6, 0x3e78ba1460f99af3UL, 0x0011fd546578f00cUL) /* 3643 */ +P(16, 0x0a01426572cfcb63UL, 0x0011e9310b8b4c9cUL) /* 3659 */ +P(12, 0xbea857968f3cbd67UL, 0x0011da3405db9911UL) /* 3671 */ +P( 2, 0x78db213eefe659e9UL, 0x0011d7b6f4eb055dUL) /* 3673 */ +P( 4, 0x963e8541a74d35f5UL, 0x0011d2bee748c145UL) /* 3677 */ +P(14, 0x9e22d152776f2e43UL, 0x0011c1706ddce7a7UL) /* 3691 */ +P( 6, 0x05d10d39d1e1f291UL, 0x0011ba0fed2a4f14UL) /* 3697 */ +P( 4, 0x374468dccaced1ddUL, 0x0011b528538ed64aUL) /* 3701 */ +P( 8, 0x8d145c7d110c5ad5UL, 0x0011ab61404242acUL) /* 3709 */ +P(10, 0x3251a39f5acb5737UL, 0x00119f378ce81d2fUL) /* 3719 */ +P( 8, 0xa66e50171443506fUL, 0x001195889ece79daUL) /* 3727 */ +P( 6, 0x124f69ad91dd4cbdUL, 0x00118e4c65387077UL) /* 3733 */ +P( 6, 0xec24f8f2a61a2793UL, 0x001187161d70e725UL) /* 3739 */ +P(22, 0xb472148e656b7a51UL, 0x00116cd6d1c85239UL) /* 3761 */ +P( 6, 0x0adf9570e1142f07UL, 0x001165bbe7ce86b1UL) /* 3767 */ +P( 2, 0x89bf33b065119789UL, 0x0011635ee344ce36UL) /* 3769 */ +P(10, 0x8f0149803cb291ebUL, 0x0011579767b6d679UL) /* 3779 */ +P(14, 0x8334b63afd190a31UL, 0x00114734711e2b54UL) /* 3793 */ +P( 4, 0x920908d50d6aba7dUL, 0x0011428b90147f05UL) /* 3797 */ +P( 6, 0x57d8b018c5a33d53UL, 0x00113b92f3021636UL) /* 3803 */ +P(18, 0xea1773092dc27ee5UL, 0x001126cabc886884UL) /* 3821 */ +P( 2, 0xcae5f38b7bf2e00fUL, 0x0011247eb1b85976UL) /* 3823 */ +P(10, 0x2bd02df34f695349UL, 0x0011190bb01efd65UL) /* 3833 */ +P(14, 0xddfecd5be62e2eb7UL, 0x0011091de0fd679cUL) /* 3847 */ +P( 4, 0xdbf849ebec96c4a3UL, 0x001104963c7e4e0bUL) /* 3851 */ +P( 2, 0xda31d4d0187357c5UL, 0x00110253516420b0UL) /* 3853 */ +P(10, 0xe34e21cc2d5418a7UL, 0x0010f70db7c41797UL) /* 3863 */ +P(14, 0x68ca5137a9e574adUL, 0x0010e75ee2bf9ecdUL) /* 3877 */ +P( 4, 0x3eaa0d0f804bfd19UL, 0x0010e2e91c6e0676UL) /* 3881 */ +P( 8, 0x554fb753cc20e9d1UL, 0x0010da049b9d428dUL) /* 3889 */ +P(18, 0x797afcca1300756bUL, 0x0010c6248fe3b1a2UL) /* 3907 */ +P( 4, 0x8b8d950b52eeea77UL, 0x0010c1c03ed690ebUL) /* 3911 */ +P( 6, 0xfb6cd166acabc185UL, 0x0010bb2e1379e3a2UL) /* 3917 */ +P( 2, 0x4eb6c5ed9437a7afUL, 0x0010b8fe7f61228eUL) /* 3919 */ +P( 4, 0xd1eddbd91b790cdbUL, 0x0010b4a10d60a4f7UL) /* 3923 */ +P( 6, 0x93d714ea4d8948e9UL, 0x0010ae192681ec0fUL) /* 3929 */ +P( 2, 0x3ca13ed8145188d3UL, 0x0010abecfbe5b0aeUL) /* 3931 */ +P(12, 0x829086016da89c57UL, 0x00109eefd568b96dUL) /* 3943 */ +P( 4, 0xd7da1f432124a543UL, 0x00109a9ff178b40cUL) /* 3947 */ +P(20, 0x7ead5581632fb07fUL, 0x00108531e22f9ff9UL) /* 3967 */ +P(22, 0x35443837f63ec3bdUL, 0x00106ddec1af4417UL) /* 3989 */ + +#undef FIRST_OMITTED_PRIME +#define FIRST_OMITTED_PRIME 4001 -- cgit v1.2.1