k-non-powerfree_numbers_in_range.sf 740 B

123456789101112131415161718192021222324252627282930
  1. #!/usr/bin/ruby
  2. # Author: Trizen
  3. # Date: 03 May 2023
  4. # https://github.com/trizen
  5. # A simple algorithm for generating the non-(k-powerfree) numbers in a given range [A, B].
  6. # A number is called k-powerfree, if all the exponents in its prime factorization are < k.
  7. func non_powerfree(A, B, k=1) {
  8. var arr = []
  9. for j in (2 .. B.iroot(k)) {
  10. var m = j**k
  11. for s in (idiv_ceil(A,m) .. idiv(B,m)) {
  12. if (s.is_powerfree(k)) {
  13. arr << m*s
  14. }
  15. }
  16. }
  17. return arr.sort
  18. }
  19. say non_powerfree(65, 100, 2) #=> [68, 72, 75, 76, 80, 81, 84, 88, 90, 92, 96, 98, 99, 100]
  20. say non_powerfree(64, 150, 3) #=> [64, 72, 80, 81, 88, 96, 104, 108, 112, 120, 125, 128, 135, 136, 144]