6april.pl 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. #!/usr/bin/perl
  2. func f(n) {
  3. #moebius(rad(n))
  4. (-1)**omega(n)
  5. }
  6. func g(n) {
  7. n.divisors.sum{|d|
  8. f(d)
  9. }
  10. }
  11. func g2(n) {
  12. n.divisors.sum {|d|
  13. moebius(rad(d))
  14. }
  15. }
  16. func g3(n) {
  17. #if (n.is_perfect_power) {
  18. #return (n.factor.lcm / n.factor_exp{.tail}.lcm)
  19. #return n.factor_exp.map{.tail}.max
  20. #assert_eq(n.perfect_root, n.perfect_root.rad)
  21. #}
  22. #n.is_perfect_power ? (moebius(n.rad) * ((n.perfect_power - 1) ** omega(n.rad))) : 0
  23. #moebius(n.perfect_root) *
  24. #(n.perfect_power-1)**omega(n) *
  25. (n.perfect_power - 1)**omega(n) * moebius(n.rad)
  26. }
  27. func gsum(n) {
  28. sum(1..n, {|k|
  29. (-1)**bigomega(k) * faulhaber(floor(n/k), 1)
  30. #k.divisors.sum {|d|
  31. # d**2 * liouville(d)
  32. #}
  33. })
  34. }
  35. func gsum2(n) {
  36. sum(1..n, {|k|
  37. moebius(k)**2 * faulhaber(floor(n/k), 1)
  38. #k.divisors.sum {|d|
  39. # d**2 * liouville(d)
  40. #}
  41. })
  42. }
  43. say g(2**3 * 3**3)
  44. say g3(2**3 * 3**3)
  45. for n in (2..100) {
  46. say "Testing: #{n}"
  47. #assert_eq(g3(n), g(n), "Failed for: n = #{n}")
  48. # next if n.is_squarefree
  49. #~ if (n.is_squarefree) {
  50. #~ assert_eq(g(n), 0)
  51. #~ }
  52. #~ next
  53. #n.is_prime_power || next
  54. #n.is_perfect_power || next
  55. #n.perfect_root == n.perfect_root.rad || next
  56. #n = n.pn_primorial
  57. #n.is_squarefree || next
  58. if (g3(n) != g(n)) {
  59. say "Not matching for #{n} -- #{g(n)} != #{g3(n)} -> #{n.factor_exp}"
  60. }
  61. }
  62. __END__
  63. #say 20.of(g)
  64. #say 20.of(g2)
  65. #var n = (43*13)**5
  66. say g(n)
  67. say g2(n)
  68. say g3(n)
  69. __END__
  70. # 282488053
  71. #say 20.of { gsum(_) }
  72. #say 20.of { gsum(_) }.map_cons(2, {|a,b| b-a })
  73. #say 20.of(g)
  74. for n in (1..1e4) {
  75. #var k = 1e20.irand
  76. #if (k.is_squarefree) {
  77. #say "Testing: #{k}"
  78. # assert_eq(g(k), euler_phi(k))
  79. #}
  80. if (g(n) != euler_phi(n)) {
  81. say n.factor
  82. }
  83. }
  84. #If n is squarefree (A005117), then a(n) = A000010(n) where A000010 is the Euler totient function.
  85. __END__
  86. var n = 10000
  87. say gsum(n)
  88. say gsum2(n)
  89. say ''
  90. say (n**3 * zeta(6)/(3*zeta(3)))
  91. say (n**3 * zeta(3)/(3*zeta(6)))
  92. say ''
  93. say (faulhaber(n, 2) * zeta(6)/(zeta(3)))
  94. say (faulhaber(n, 2) * zeta(3)/(zeta(6)))
  95. #Sum_{k=1..n} |a(k)| ~ n^3 * zeta(6)/(3*zeta(3)).
  96. #(n^3 * zeta(6)) / (3 * zeta(3))
  97. #say 60.of { gsum(_) } #.map_cons(2, {|a,b| b-a })
  98. #1, 4, 12, 25, 49, 73, 121, 172, 245, 317, 437, 541, 709, 853, 1045, 1250, 1538, 1757, 2117, 2429, 2813, 3173, 3701, 4109, 4710, 5214, 5870, 6494, 7334, 7910, 8870, 9689, 10649, 11513, 12665, 13614, 14982, 16062, 17406, 18630, 20310, 21462, 23310, 24870, 26622, 28206, 30414, 32054, 34407, 36210
  99. #1, 4, 12, 25, 49, 73, 121, 172, 245, 317, 437, 541, 709, 853, 1045, 1250, 1538, 1757, 2117, 2429, 2813, 3173, 3701, 4109, 4710, 5214, 5870, 6494, 7334, 7910, 8870, 9689, 10649, 11513, 12665, 13614, 14982, 16062, 17406, 18630, 20310, 21462, 23310, 24870, 26622, 28206, 30414, 32054, 34407, 36210, 38514, 40698, 43506, 45474, 48354, 50802, 53682, 56202, 59682