generate_primes_with_digits_in_descending_order.sf 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #!/usr/bin/ruby
  2. # Daniel "Trizen" Șuteu
  3. # Date: 09 April 2022
  4. # https://github.com/trizen
  5. # Generate prime numbers that have all digits in descending order.
  6. # See also:
  7. # https://rosettacode.org/wiki/Descending_primes
  8. # OEIS sequences:
  9. # https://oeis.org/A052014 -- Primes with distinct digits in descending order.
  10. func primes_with_descending_digits(base = 10) {
  11. var list = []
  12. var digits = @(1..^base)
  13. var end_digits = digits.grep { .is_coprime(base) }
  14. list << digits.grep { .is_prime && !.is_coprime(base) }...
  15. for k in (0 .. digits.end) {
  16. digits.combinations(k, {|*a|
  17. var v = a.digits2num(base)
  18. end_digits.each {|d|
  19. var n = (v*base + d)
  20. next if ((n >= base) && (a[0] <= d))
  21. list << n if n.is_prime
  22. }
  23. })
  24. }
  25. list.sort
  26. }
  27. var base = 10
  28. var arr = primes_with_descending_digits(base)
  29. say "There are #{arr.len} descending primes in base #{base}.\n"
  30. arr.each_slice(8, {|*a|
  31. say a.map { '%9s' % _ }.join(' ')
  32. })