fork download
  1. # Find all prime factors of a number.
  2.  
  3. def prime_factors(n)
  4. r = []
  5. u = 101
  6. i = 2
  7. while i*i <= n
  8. c = 0
  9. while n % i == 0
  10. n /= i
  11. c += 1
  12. end
  13. if c != 0
  14. r << [i, c]
  15. end
  16. # 1224..24
  17. # (Idk if this is any faster than just incrementing by one)
  18. d, u = (u * 10).divmod(825)
  19. i += d
  20. end
  21. r << [n, 1] if n > 1
  22. r
  23. end
  24.  
  25. # Test.
  26.  
  27. 10.times do |n|
  28. p prime_factors(n)
  29. end
  30. p prime_factors(2**31-1)
  31. p prime_factors(2**31)
  32. p prime_factors(3**3*5**5)
  33. p prime_factors(2*3*5*7*11*13*17*19)
  34. p prime_factors(70) # Problem that prompted this.
Success #stdin #stdout 0.02s 7996KB
stdin
Standard input is empty
stdout
[]
[]
[[2, 1]]
[[3, 1]]
[[2, 2]]
[[5, 1]]
[[2, 1], [3, 1]]
[[7, 1]]
[[2, 3]]
[[3, 2]]
[[2147483647, 1]]
[[2, 31]]
[[3, 3], [5, 5]]
[[2, 1], [3, 1], [5, 1], [7, 1], [11, 1], [13, 1], [17, 1], [19, 1]]
[[2, 1], [5, 1], [7, 1]]