示例#1
0
int
main (int argc, char *argv[])
{
    unsigned long  n;
    unsigned long  limit = 2222;
    mpz_t          f, r;

    tests_start ();

    if (argc > 1 && argv[1][0] == 'x')
        limit = ULONG_MAX;
    else if (argc > 1)
        limit = atoi (argv[1]);

    /* for small limb testing */
    limit = MIN (limit, MP_LIMB_T_MAX);

    mpz_init_set_ui (f, 1);  /* 0# = 1 */
    mpz_init (r);

    for (n = 0; n < limit; n++)
    {
        mpz_primorial_ui (r, n);
        MPZ_CHECK_FORMAT (r);

        if (mpz_cmp (f, r) != 0)
        {
            printf ("mpz_primorial_ui(%lu) wrong\n", n);
            printf ("  got  ");
            mpz_out_str (stdout, 10, r);
            printf("\n");
            printf ("  want ");
            mpz_out_str (stdout, 10, f);
            printf("\n");
            abort ();
        }

        if (isprime (n+1))
            mpz_mul_ui (f, f, n+1);  /* p# = (p-1)# * (p) */
    }

    mpz_clear (f);
    mpz_clear (r);

    tests_end ();

    exit (0);
}
示例#2
0
static PyObject *
GMPy_MPZ_Function_Primorial(PyObject *self, PyObject *other)
{
    MPZ_Object *result = NULL;
    unsigned long n;

    n = c_ulong_From_Integer(other);
    if (n == (unsigned long)(-1) && PyErr_Occurred()) {
        return NULL;
    }

    if ((result = GMPy_MPZ_New(NULL))) {
        mpz_primorial_ui(result->z, n);
    }
    return (PyObject*)result;
}