generate_primes_with_prime_digits.sf 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #!/usr/bin/ruby
  2. # Daniel "Trizen" Șuteu
  3. # Date: 08 August 2021
  4. # https://github.com/trizen
  5. # Generate prime numbers that have only prime digits (in a given base).
  6. # See also:
  7. # https://oeis.org/A019546
  8. # https://rosettacode.org/wiki/Extra_primes
  9. func primes_with_prime_digits(upto, base = 10) {
  10. upto = prev_prime(upto+1)
  11. var list = []
  12. var digits = @(^base)
  13. var prime_digits = digits.grep { .is_prime }
  14. var end_digits = prime_digits.grep { .is_coprime(base) }
  15. list << prime_digits.grep { !.is_coprime(base) }...
  16. for k in (0 .. upto.ilog(base)) {
  17. prime_digits.variations_with_repetition(k, {|*a|
  18. var v = a.digits2num(base)
  19. end_digits.each {|d|
  20. var n = (v*base + d)
  21. list << n if (n.is_prime && (n <= upto))
  22. }
  23. })
  24. }
  25. list.sort
  26. }
  27. say primes_with_prime_digits(1e4)
  28. __END__
  29. [2, 3, 5, 7, 23, 37, 53, 73, 223, 227, 233, 257, 277, 337, 353, 373, 523, 557, 577, 727, 733, 757, 773, 2237, 2273, 2333, 2357, 2377, 2557, 2753, 2777, 3253, 3257, 3323, 3373, 3527, 3533, 3557, 3727, 3733, 5227, 5233, 5237, 5273, 5323, 5333, 5527, 5557, 5573, 5737, 7237, 7253, 7333, 7523, 7537, 7573, 7577, 7723, 7727, 7753, 7757]