t-fac_ui.c
上传用户:qaz666999
上传日期:2022-08-06
资源大小:2570k
文件大小:2k
源码类别:

数学计算

开发平台:

Unix_Linux

  1. /* Exercise mpz_fac_ui.
  2. Copyright 2000, 2001, 2002 Free Software Foundation, Inc.
  3. This file is part of the GNU MP Library.
  4. The GNU MP Library is free software; you can redistribute it and/or modify
  5. it under the terms of the GNU Lesser General Public License as published by
  6. the Free Software Foundation; either version 3 of the License, or (at your
  7. option) any later version.
  8. The GNU MP Library is distributed in the hope that it will be useful, but
  9. WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  10. or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
  11. License for more details.
  12. You should have received a copy of the GNU Lesser General Public License
  13. along with the GNU MP Library.  If not, see http://www.gnu.org/licenses/.  */
  14. #include <stdio.h>
  15. #include <stdlib.h>
  16. #include "gmp.h"
  17. #include "gmp-impl.h"
  18. #include "tests.h"
  19. /* Usage: t-fac_ui [x|num]
  20.    With no arguments testing goes up to the initial value of "limit" below.
  21.    With a number argument tests are carried that far, or with a literal "x"
  22.    tests are continued without limit (this being meant only for development
  23.    purposes).  */
  24. int
  25. main (int argc, char *argv[])
  26. {
  27.   unsigned long  n;
  28.   unsigned long  limit = 1500;
  29.   mpz_t          f, r;
  30.   tests_start ();
  31.   if (argc > 1 && argv[1][0] == 'x')
  32.     limit = ULONG_MAX;
  33.   else if (argc > 1)
  34.     limit = atoi (argv[1]);
  35.   /* for small limb testing */
  36.   limit = MIN (limit, MP_LIMB_T_MAX);
  37.   mpz_init_set_ui (f, 1);  /* 0! = 1 */
  38.   mpz_init (r);
  39.   for (n = 0; n < limit; n++)
  40.     {
  41.       mpz_fac_ui (r, n);
  42.       MPZ_CHECK_FORMAT (r);
  43.       if (mpz_cmp (f, r) != 0)
  44.         {
  45.           printf ("mpz_fac_ui(%lu) wrongn", n);
  46.           printf ("  got  "); mpz_out_str (stdout, 10, r); printf("n");
  47.           printf ("  want "); mpz_out_str (stdout, 10, f); printf("n");
  48.           abort ();
  49.         }
  50.       mpz_mul_ui (f, f, n+1);  /* (n+1)! = n! * (n+1) */
  51.     }
  52.   mpz_clear (f);
  53.   mpz_clear (r);
  54.   tests_end ();
  55.   exit (0);
  56. }