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

数学计算

开发平台:

Unix_Linux

  1. /* Classify numbers as probable primes, primes or composites.
  2.    With -q return true if the following argument is a (probable) prime.
  3. Copyright 1999, 2000, 2002, 2005 Free Software Foundation, Inc.
  4. This program is free software; you can redistribute it and/or modify it under
  5. the terms of the GNU General Public License as published by the Free Software
  6. Foundation; either version 3 of the License, or (at your option) any later
  7. version.
  8. This program is distributed in the hope that it will be useful, but WITHOUT ANY
  9. WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
  10. PARTICULAR PURPOSE.  See the GNU General Public License for more details.
  11. You should have received a copy of the GNU General Public License along with
  12. this program.  If not, see http://www.gnu.org/licenses/.  */
  13. #include <stdlib.h>
  14. #include <string.h>
  15. #include <stdio.h>
  16. #include "gmp.h"
  17. char *progname;
  18. void
  19. print_usage_and_exit ()
  20. {
  21.   fprintf (stderr, "usage: %s -q nnnn", progname);
  22.   fprintf (stderr, "usage: %s nnn ...n", progname);
  23.   exit (-1);
  24. }
  25. int
  26. main (int argc, char **argv)
  27. {
  28.   mpz_t n;
  29.   int i;
  30.   progname = argv[0];
  31.   if (argc < 2)
  32.     print_usage_and_exit ();
  33.   mpz_init (n);
  34.   if (argc == 3 && strcmp (argv[1], "-q") == 0)
  35.     {
  36.       if (mpz_set_str (n, argv[2], 0) != 0)
  37. print_usage_and_exit ();
  38.       exit (mpz_probab_prime_p (n, 5) == 0);
  39.     }
  40.   for (i = 1; i < argc; i++)
  41.     {
  42.       int class;
  43.       if (mpz_set_str (n, argv[i], 0) != 0)
  44. print_usage_and_exit ();
  45.       class = mpz_probab_prime_p (n, 5);
  46.       mpz_out_str (stdout, 10, n);
  47.       if (class == 0)
  48. puts (" is composite");
  49.       else if (class == 1)
  50. puts (" is a probable prime");
  51.       else /* class == 2 */
  52. puts (" is a prime");
  53.     }
  54.   exit (0);
  55. }