imprimitive_carmichael.sf 972 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #!/usr/bin/ruby
  2. # Generate imprimitive Carmichael numbers with n prime factors.
  3. func is_imprimitive(n) {
  4. n.factor.gcd_by { .dec }**2 > lambda(n)
  5. }
  6. func generate_imprimitive(p, m) {
  7. for z in (2..100) {
  8. var arr = []
  9. for k in (1 .. 2.sqrt**z) {
  10. k.is_smooth(5) || next
  11. var r = (2*k*p + 1)
  12. if (r.is_prime && (r.dec.gpf == p)) {
  13. arr << r
  14. }
  15. }
  16. var t = binomial(arr.len, m)
  17. t >= m || next
  18. t < 1e6 || break
  19. var count = 0
  20. say "# Combinations: #{t}"
  21. arr.combinations(m, {|*a|
  22. with (a.prod) { |C|
  23. if (C.is_carmichael) {
  24. say C
  25. say "# Imprimitive with p = #{p}: #{C}" if is_imprimitive(C)
  26. }
  27. }
  28. break if (++count > 1e5)
  29. })
  30. }
  31. }
  32. for p in (primes(100..457)) {
  33. say "# p = #{p}"
  34. generate_imprimitive(p,10)
  35. }