/* A few random values */
{ "41", 20, "269128937220" },
{ "62", 37, "147405545359541742" },
{ "50", 18, "18053528883775" },
{ "149", 21, "19332950844468483467894649" },
};
mpz_t n, want; int i;
mpz_init (n);
mpz_init (want);
for (i = 0; i < numberof (data); i++)
{
mpz_set_str_or_abort (n, data[i].n, 0);
mpz_set_str_or_abort (want, data[i].want, 0);
try_mpz_bin_ui (want, n, data[i].k);
if (mpz_fits_ulong_p (n))
try_mpz_bin_uiui (want, mpz_get_ui (n), data[i].k);
}
mpz_clear (n);
mpz_clear (want);
}
/* Test some bin(2k,k) cases. This produces some biggish numbers to
exercise the limb accumulating code. */ void
twos (int count)
{
mpz_t n, want; unsignedlong k;
mpz_init (n);
mpz_init_set_ui (want, (unsignedlong) 2); for (k = 1; k < count; k++)
{
mpz_set_ui (n, 2*k);
try_mpz_bin_ui (want, n, k);
/* Test some random bin(n,k) cases. This produces some biggish
numbers to exercise the limb accumulating code. */ void
randomwalk (int count)
{
mpz_t n_z, want, tmp; unsignedlong n, k, i, r; int tests;
gmp_randstate_ptr rands;
rands = RANDS;
mpz_init (n_z);
k = 3;
n = 12;
mpz_init_set_ui (want, (unsignedlong) 220); /* binomial(12,3) = 220 */
for (tests = 1; tests < count; tests++)
{
r = gmp_urandomm_ui (rands, 62) + 1; for (i = r & 7; i > 0; i--)
{
n++; k++;
mpz_mul_ui (want, want, n);
mpz_divexact_ui (want, want, k);
} for (i = r >> 3; i > 0; i--)
{
n++;
mpz_mul_ui (want, want, n);
mpz_divexact_ui (want, want, n - k);
}
/* Test some random bin(n,k) cases. This produces some biggish
numbers to exercise the limb accumulating code. */ void
randomwalk_down (int count)
{
mpz_t n_z, want, tmp; unsignedlong n, k, i, r; int tests;
gmp_randstate_ptr rands;
rands = RANDS;
mpz_init (n_z);
mpz_init (tmp);
k = 2;
n = ULONG_MAX;
mpz_init_set_ui (want, n);
mpz_mul_ui (want, want, n >> 1);
for (tests = 1; tests < count; tests++)
{
r = gmp_urandomm_ui (rands, 62) + 1; for (i = r & 7; i > 0; i--)
{
mpz_mul_ui (want, want, n - k);
++k;
mpz_divexact_ui (want, want, k);
} for (i = r >> 3; i > 0; i--)
{
mpz_mul_ui (want, want, n - k);
mpz_divexact_ui (want, want, n);
--n;
}
mpz_set_ui (n_z, n);
try_mpz_bin_ui (want, n_z, n - k);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.