upper_bounds_2.sf 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #!/usr/bin/ruby
  2. # a(n) is the smallest Carmichael number such that gpf(p-1) = prime(n) for all prime factors p of a(n), or 0 if no such number exists.
  3. # This program efficiently generates upper-bounds for a(n).
  4. func a(n) {
  5. var p = prime(n)
  6. for z in (2..100) {
  7. var arr = []
  8. for k in (1 .. round(sqrt(2)**z)) {
  9. var r = (2*k*p + 1)
  10. if (r.is_prime && (r.dec.gpf == p)) {
  11. arr << r
  12. }
  13. }
  14. arr.combinations(3, {|*a|
  15. var C = a.prod
  16. return C if C.is_carmichael
  17. })
  18. }
  19. }
  20. if (ARGV) {
  21. say a(ARGV[0].to_i)
  22. return true
  23. }
  24. for n in (1..100) {
  25. say ("a(10^#{n}) <= ", a(10**n))
  26. }
  27. __END__
  28. a(10^1) <= 1269295201
  29. a(10^2) <= 73881755325361
  30. a(10^3) <= 80450619910537321
  31. a(10^4) <= 15886037020062115176481
  32. a(10^5) <= 49794506529815563415921701
  33. a(10^6) <= 1254931836141826573323167521
  34. a(10^7) <= 8508919739555013050246491382764321
  35. a(10^8) <= 1487446982391835231061076260463688369
  36. a(10^9) <= 1922278110523271693763383700255402020449
  37. a(10^10) <= 139290264728702092696281089762626914038407921