power_sigma.sf 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #!/usr/bin/ruby
  2. # Sum and count of the k-th power divisors of n.
  3. # See also:
  4. # https://oeis.org/A035316
  5. # https://oeis.org/A113061
  6. # https://oeis.org/A046951
  7. func power_sigma0(n,k) {
  8. n.factor_prod {|_,e|
  9. floor(e/k) + 1
  10. }
  11. }
  12. func power_sigma(n, k, j=1) {
  13. return 0 if (n == 0)
  14. return power_sigma0(n,k) if (j == 0)
  15. n.factor_prod {|p,e|
  16. (p**(j*k*(1+floor(e/k))) - 1) / (p**(j*k) - 1)
  17. }
  18. }
  19. for n in (1..20) {
  20. say "sum of square divisors of #{n} is #{power_sigma(n, 2)}"
  21. assert_eq(power_sigma(n, 2), 2.power_divisors(n).sum)
  22. assert_eq(power_sigma(n, 3), 3.power_divisors(n).sum)
  23. assert_eq(power_sigma(n, 4), 4.power_divisors(n).sum)
  24. assert_eq(power_sigma(n, 2, 2), 2.power_divisors(n).sum { _**2 })
  25. assert_eq(power_sigma(n, 3, 2), 3.power_divisors(n).sum { _**2 })
  26. assert_eq(power_sigma(n, 4, 2), 4.power_divisors(n).sum { _**2 })
  27. assert_eq(power_sigma(n, 2, 3), 2.power_divisors(n).sum { _**3 })
  28. assert_eq(power_sigma(n, 3, 3), 3.power_divisors(n).sum { _**3 })
  29. assert_eq(power_sigma(n, 4, 3), 4.power_divisors(n).sum { _**3 })
  30. }
  31. __END__
  32. sum of square divisors of 1 is 1
  33. sum of square divisors of 2 is 1
  34. sum of square divisors of 3 is 1
  35. sum of square divisors of 4 is 5
  36. sum of square divisors of 5 is 1
  37. sum of square divisors of 6 is 1
  38. sum of square divisors of 7 is 1
  39. sum of square divisors of 8 is 5
  40. sum of square divisors of 9 is 10
  41. sum of square divisors of 10 is 1
  42. sum of square divisors of 11 is 1
  43. sum of square divisors of 12 is 5
  44. sum of square divisors of 13 is 1
  45. sum of square divisors of 14 is 1
  46. sum of square divisors of 15 is 1
  47. sum of square divisors of 16 is 21
  48. sum of square divisors of 17 is 1
  49. sum of square divisors of 18 is 10
  50. sum of square divisors of 19 is 1
  51. sum of square divisors of 20 is 5