sum_of_prime-power_exponents_of_factorial.sf 990 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #!/usr/bin/ruby
  2. # Daniel "Trizen" Șuteu
  3. # Date: 15 January 2019
  4. # https://github.com/trizen
  5. # Efficient program for computing the sum of exponents in prime-power factorization of n!.
  6. #~ a(10^1) = 15
  7. #~ a(10^2) = 239
  8. #~ a(10^3) = 2877
  9. #~ a(10^4) = 31985
  10. #~ a(10^5) = 343614
  11. #~ a(10^6) = 3626619
  12. #~ a(10^7) = 37861249
  13. #~ a(10^8) = 392351272
  14. #~ a(10^9) = 4044220058
  15. #~ a(10^10) = 41518796555
  16. # See also:
  17. # https://oeis.org/A022559
  18. # https://oeis.org/A071811
  19. func sum_of_exponents_of_factorial (n) {
  20. return 0 if (n <= 1)
  21. var s = n.isqrt
  22. var u = floor(n/(s+1))
  23. var total = 0
  24. var prev = prime_power_count(n)
  25. for k in (1 .. s) {
  26. var curr = prime_power_count(floor(n/(k+1)))
  27. total += k*(prev - curr)
  28. prev = curr
  29. }
  30. for k in (1..u) {
  31. if (k.is_prime_power) {
  32. total += floor(n/k)
  33. }
  34. }
  35. return total
  36. }
  37. for k in (1..7) {
  38. say ("a(10^#{k}) = ", sum_of_exponents_of_factorial(10**k))
  39. }