2018年1月6日土曜日

180107

Ruby


Hurwitz sums

H() をHurwitz class number とし、
Hurwitz sums s_j(n) を次のように定義する。
s_j(n) = (1/2) * Sum_{|k|<=2*sqrt(n)} k^j*H(4*n-k^2).

素数p に対し、
s_2(p) = p^2 - 1
s_4(p) = 2*p^3 - 3*p - 1
s_6(p) = 5*p^4 - 9*p^2 - 5*p - 1
s_8(p) = 14*p^5 - 28*p^3 - 20*p^2 - 7*p - 1
s_10(p) = 42*p^6 - 90*p^4 - 75*p^3 - 35*p^2 - 9*p - 1 - τ(p)
となる。

以下のコードでs_j(p) を求めてみた。

require 'prime'

def A259825(n)
  return -1 if n == 0
  return 0 if n % 4 == 1 || n % 4 == 2
  s = 0
  (1..Math.sqrt(n / 3).to_i).each{|a|
    (0..a).each{|b|
      c4 = n + b * b
      if c4 % (4 * a) == 0
        c = c4 / (4 * a)
        if a == c
          if a == b
            s += 4
          elsif b == 0
            s += 6
          else
            s += 12
          end
        elsif a < c
          if a == b
            s += 12
          elsif b == 0
            s += 12
          else
            s += 24
          end
        end
      end
    }
  }
  s
end

def A(k, n)
  m = 4 * n
  (1..(2 * Math.sqrt(n)).to_i).inject(0 ** k * A259825(m) / 2){|s, i| s + i ** k * A259825(m - i * i)} / 12
end

def B(k, n)
  p_ary = [0] + Prime.take(n).to_a
  m = p_ary[-1]
  (1..n).map{|i| A(k, p_ary[i])}
end

n = 30
(1..10).each{|i| p [2 * i, B(2 * i, n)]}

出力結果
[2, [3, 8, 24, 48, 120, 168, 288, 360, 528, 840, 960, 1368, 1680, 1848, 2208, 2808, 3480, 3720, 4488, 5040, 5328, 6240, 6888, 7920, 9408, 10200, 10608, 11448, 11880, 12768]]
[4, [9, 44, 234, 664, 2628, 4354, 9774, 13660, 24264, 48690, 59488, 101194, 137718, 158884, 207504, 297594, 410580, 453778, 601324, 715608, 777814, 985840, 1143324, 1409670, 1825054, 2060298, 2185144, 2449764, 2589730, 2885454]]
[6, [33, 308, 2874, 11528, 72060, 141218, 414918, 648260, 1394328, 3528690, 4608800, 9358298, 14113470, 17077148, 24378288, 39426858, 60555180, 69195410, 100714868, 127012680, 141942878, 194693840, 237229188, 313639470, 442561238, 520209690, 562658408, 655294428, 705683330, 815121318]]
[8, [129, 2444, 39714, 224664, 2214948, 5133114, 19734534, 34465980, 89757384, 286456170, 399954528, 969369474, 1620023118, 2055854724, 3207878544, 5850511794, 10003119540, 11817917898, 18893239884, 25249088088, 29012002734, 43064859120, 55130420604, 78156934110, 120197019894, 147112353858, 162267561144, 196322711364, 215370854490, 257900267814]]
[10, [513, 20708, 584874, 4714408, 72449100, 200562418, 1012788198, 1953009460, 6172747128, 24788658690, 37242612640, 107770200778, 198936710910, 265200653548, 449592659568, 931777815258, 1775665528380, 2155635964450, 3812897562148, 5368106367720, 6351988507678, 10168013581840, 13756516406388, 20892507185070, 34901774222518, 44492660299530, 50365739676808, 62928544075308, 70351920200530, 87512337544518]]
[12, [2049, 181244, 8926194, 104289464, 2455548468, 8246944874, 55010676294, 114990517100, 442729758504, 2229731842650, 3640923116768, 12584050175954, 25533404751918, 35843543103764, 65415419240784, 155865973907394, 331654092615300, 409919569308218, 811017463040444, 1192365811189368, 1456457608112654, 2500867773988400, 3607558642090284, 5861328443293950, 10582759146802934, 14058219944572818, 16486641420019544, 21085899713623764, 24037401934167050, 31154712798771174]]
[14, [8193, 1610708, 139025274, 2397234888, 85014149340, 352434550818, 3118993613478, 6938373378660, 32671756845528, 205710978523890, 368811257026080, 1524456076671258, 3379136118265950, 5010691521137148, 9750330789350448, 27025215503630058, 64328351349802380, 80191929818719890, 179491298171857428, 272972530537668360, 345299330092071678, 632301339896450640, 981744755261722788, 1702821476030760270, 3306456962987468598, 4580992525579668570, 5616913396235188008, 7292462401620784188, 8477906438647107330, 11488394671953270918]]
[16, [32769, 14414444, 2190628674, 56632431064, 2982373957188, 15523539588634, 182595055842054, 425575161749020, 2460657409503624, 19319465963741130, 38379163197882208, 190131995077929634, 457067675818655118, 718758894907332004, 1478268080488126224, 4813672930807565394, 12839561340243691860, 16013694032851837738, 40956795669825225004, 63860230452623159448, 83983920045368334574, 163079769425865389680, 274991071525205126364, 507623976056948588190, 1055898568400194189174, 1527940695571469390178, 1972887914497934180344, 2583638229756401828964, 3061014981519328100410, 4352785707799601034534]]
[18, [131073, 129402308, 34747552074, 1363579668968, 105512868252780, 700402917646418, 10944246022054758, 26401440717171860, 188162176478505528, 1838463643307416290, 4079472563512361120, 24285674673824261738, 62805883107401926590, 105251575420179047948, 227072526377985554928, 875176009945289931258, 2619641245598830857180, 3248660831029550473730, 9569547485884912616708, 15180372290302972194600, 20846596598034565158878, 42703157341971684548240, 78838646640507192722388, 154263056908360102265070, 342866246691075769111478, 519264690557328671856810, 709369479551958868248008, 933181971707580839797068, 1125083663769729589303730, 1685327444498021593048518]]
[20, [524289, 1163310044, 553244171154, 33258648265464, 3753731870625108, 32211568604168394, 667319070840143814, 1651125814485793740, 14558025144269088744, 176723096638372439610, 441213136033246906848, 3164236870853999654514, 8729810745923145428718, 15678646585819633755444, 35256405678540521286864, 161651097592314837901794, 543668635398377615933220, 667464089890997383474458, 2277452598979433262705564, 3652575969841555585478328, 5261409545724369638380494, 11317609829610130954038960, 23040071747491081578152844, 47559066180825074348320830, 112814596434290294415898614, 179290894969193853332773938, 259721651007382022243003544, 342452608486367995349918964, 419309202665617028732382570, 664236173072310322158561894]]

0 件のコメント:

コメントを投稿