smallest_lucas-carmichael_divisible_by_n.sf 932 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. #!/usr/bin/ruby
  2. # Simple method for finding the smallest Lucas-Carmichael number divisible by n.
  3. # See also:
  4. # https://oeis.org/A253597
  5. # https://oeis.org/A253598
  6. func lucas_carmichael_divisible_by(n) {
  7. n.is_even && return nil
  8. gcd(n, psi(n)) == 1 || return nil
  9. n >= 3 || return nil
  10. var c = n
  11. var t = n
  12. if (c.is_prime) {
  13. c = (c**2 + c)
  14. }
  15. c.is_lucas_carmichael && return c
  16. loop {
  17. t.is_lucas_carmichael && return t
  18. t += c
  19. }
  20. }
  21. assert_eq(lucas_carmichael_divisible_by(3), 399)
  22. assert_eq(lucas_carmichael_divisible_by(3*7), 399)
  23. assert_eq(lucas_carmichael_divisible_by(7*19), 399)
  24. say lucas_carmichael_divisible_by.map(primes(3..50))
  25. say 40.of(lucas_carmichael_divisible_by).grep
  26. __END__
  27. [399, 935, 399, 935, 2015, 935, 399, 4991, 51359, 2015, 1584599, 20705, 5719, 18095]
  28. [399, 935, 399, 935, 2015, 935, 399, 399, 4991, 51359, 2015, 8855, 1584599, 9486399]