carmichael_numbers_upto.sf 747 B

12345678910111213141516171819202122232425262728293031
  1. #!/usr/bin/ruby
  2. # Generate all the Carmichael numbers, up to a given bound.
  3. func carmichael_upto(n) {
  4. var C = Set()
  5. 3 .. idiv(1+isqrt(8*n + 1), 4) -> each_prime {|p|
  6. var t = p*(p-1)
  7. var c = (p + 2*t)
  8. loop {
  9. C << c if c.is_carmichael
  10. c += t
  11. break if (c > n)
  12. }
  13. }
  14. return C.sort
  15. }
  16. var C = carmichael_upto(1e6)
  17. say C
  18. say C.len
  19. __END__
  20. [561, 1105, 1729, 2465, 2821, 6601, 8911, 10585, 15841, 29341, 41041, 46657, 52633, 62745, 63973, 75361, 101101, 115921, 126217, 162401, 172081, 188461, 252601, 278545, 294409, 314821, 334153, 340561, 399001, 410041, 449065, 488881, 512461, 530881, 552721, 656601, 658801, 670033, 748657, 825265, 838201, 852841, 997633]
  21. 43