wilson-gauss-trifactorial.sf 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. #!/usr/bin/ruby
  2. #~ func gauss(m) {
  3. #~ prod(1..m, {|k|
  4. #~ if (gcd(k, m) == 1) {
  5. #~ k
  6. #~ }
  7. #~ else {
  8. #~ 1
  9. #~ }
  10. #~ })
  11. #~ }
  12. #~ say gauss(13**2)
  13. #~ var p = 43
  14. #~ var t = mfactorial(3*p + kronecker(p, 3), 3)
  15. #~ var g = gcd(t, gauss(p**2))
  16. #~ say t/g
  17. #~ __END__
  18. #~ for p in (4..1e6) {
  19. #~ #if ((2*k - 1)!! % k**2 - k**2 == -k) {
  20. #~ #if (mfactorial(3*p - kronecker(p, 3), 3) % p**2 - p**2 / 2 == -p) {
  21. #~ if (mfactorial(3*p + kronecker(p, 3), 3) -> is_congruent(-p, p**2)) {
  22. #~ say p
  23. #~ if (!p.is_prime) {
  24. #~ die "Counter-example: #{p}"
  25. #~ }
  26. #~ }
  27. #~ elsif (p.is_prime) {
  28. #~ die "Missed a prime: #{p}"
  29. #~ }
  30. #~ }
  31. # (3*k + kronecker(k, 3)) (-3)^floor(((3*k + kronecker(k, 3)) - 1)/3) (1 - (3*k + kronecker(k, 3))/3)_floor(((3*k + kronecker(k, 3)) - 1)/3)
  32. #~ for k in (primes(2, 43)) {
  33. #~ say [k,
  34. #~ (k-1)! % k,
  35. #~ mfactorial(3*k + kronecker(k, 3), 3) % k**2 / k,
  36. #~ #mfactorial(3*k - 2*kronecker(k, 3), 3) % k**2 / k,
  37. #~ var t = (mfactorial(3*(k+1) - 1, 3) % k**2)
  38. #~ t.is_congruent(k, k**2)
  39. #~ #mfactorial(3*k + kronecker(k, 3), 3) % k**2 / k,
  40. #~ #k! % k**2 / k
  41. #~ ]
  42. #~ }
  43. #~ __END__
  44. for p in (primes(2, 100)) {
  45. #for p in (3..10) {
  46. #~ say [
  47. #~ p, mfactorial(3*p - kronecker(p, 3), 3) % p**2 - p**2 / 2 ,
  48. #~ mfactorial(3*p - kronecker(p, 3), 3) -> is_congruent(-2*p, p**2)
  49. #~ ]
  50. say [
  51. p, mfactorial(3*p + kronecker(p, 3), 3) % p**2 - p**2,
  52. mfactorial(3*p + kronecker(p, 3), 3) -> is_congruent(-p, p**2)
  53. ]
  54. #~ say [
  55. #~ p, mfactorial(3*p + kronecker(p, 3), 3) % p**2 / p,
  56. #~ #mfactorial(3*p + kronecker(p, 3), 3) -> is_congruent(-p, p**2)
  57. #~ ]
  58. #~ say [
  59. #~ p, mfactorial(3*p - kronecker(p, 5), 1) % p**3 / p
  60. #~ ]
  61. #say [p, mfactorial(3*p - kronecker(p, 3), 3) ]
  62. #say [p, mfactorial(3*p - 3, 3) % p**2 ]
  63. }
  64. __END__
  65. #For p > 2, (2p-1)!! == -p (mod p^2) if and only if p is prime.
  66. Hi,
  67. The following statement should also be provable:
  68. For p > 3, f_3(3p + (p/3)) == -p (mod p^2) if and only if p is prime.
  69. where (p/3) is the Jacobi symbol and f_3(n) are the triple factorial numbers: f_3(n) = A007661(n).
  70. #~ By Wilson's theorem, ((p - 1)/2)!^2 == (-1)^((p + 1)/2) (mod p) for each prime number p. Hence, if p == 3 (mod 4), then ((p - 1)/2)! == +-1 (mod p).