isprime.cpp 677 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #include "stdafx.h"
  2. #include "defs.h"
  3. void
  4. eval_isprime(void)
  5. {
  6. push(cadr(p1));
  7. eval();
  8. p1 = pop();
  9. if (isnonnegativeinteger(p1) && mprime(p1->u.q.a))
  10. push_integer(1);
  11. else
  12. push_integer(0);
  13. }
  14. #if SELFTEST
  15. static char *s[] = {
  16. // 0 and 1 are not prime numbers
  17. "isprime(0)",
  18. "0",
  19. "isprime(1)",
  20. "0",
  21. "isprime(13)",
  22. "1",
  23. "isprime(14)",
  24. "0",
  25. // from the Prime Curios web page
  26. "isprime(9007199254740991)",
  27. "0",
  28. // The largest prime that JavaScript supports
  29. "isprime(2^53 - 111)",
  30. "1",
  31. // misc. primes
  32. "isprime(2^50-71)",
  33. "1",
  34. "isprime(2^40-87)",
  35. "1",
  36. };
  37. void
  38. test_isprime(void)
  39. {
  40. test(__FILE__, s, sizeof s / sizeof (char *));
  41. }
  42. #endif