2017年2月19日日曜日

170219

Ruby


Eisenstein series(2)

Q とR で表してみた。

require 'prime'

def power0(a, n)
  return 1 if n == 0
  k = power0(a, n >> 1)
  k *= k
  return k if n & 1 == 0
  return k * a
end

# x > 0
def sigma(x, i)
  sum = 1
  pq = i.prime_division
  pq.each{|a, n| sum *= (power0(a, (n + 1) * x) - 1) / (power0(a, x) - 1)}
  sum
end

def bernoulli(n)
  ary = []
  a = []
  (0..n).each{|i|
    a << 1r / (i + 1)
    i.downto(1){|j| a[j - 1] = j * (a[j - 1] - a[j])}
    ary << a[0] # Bn = a[0]
  }
  ary
end

def E_2k(k, n)
  a = -4 * k / bernoulli(2 * k)[-1]
  b = a.denominator
  c = a.numerator
  [b] + (1..n).map{|i| c * sigma(2 * k - 1, i)}
end

# m次以下を取り出す
def mul(f_ary, b_ary, m)
  s1, s2 = f_ary.size, b_ary.size
  ary = Array.new(s1 + s2 - 1, 0)
  (0..s1 - 1).each{|i|
    (0..s2 - 1).each{|j|
      ary[i + j] += f_ary[i] * b_ary[j]
    }
  }
  ary[0..m]
end

# m次以下を取り出す
def power(ary, n, m)
  return [1] if n == 0
  k = power(ary, n >> 1, m)
  k = mul(k, k, m)
  return k if n & 1 == 0
  return mul(k, ary, m)
end

def f(i, j, n)
  mul(power(@q_ary, i, n), power(@r_ary, j, n), n)
end

def show(e, ary0, ary1)
  print "#{e} = "
  (0..ary0.size - 1).each{|i|
    j = ary1[i]
    if i == 0
      if j < 0
        print "-#{ary0[i]} * #{-ary1[i]}"
      else
        print "#{ary0[i]} * #{ary1[i]}"
      end
    else
      if j < 0
        print " - #{ary0[i]} * #{-ary1[i]}"
      else
        print " + #{ary0[i]} * #{ary1[i]}"
      end
    end
  }
  puts
end

n = 10
@q_ary = E_2k(2, n)
@r_ary = E_2k(3, n)

e_ary = E_2k(6, n)
c_ary = [441, 250]
f_ary0, f_ary1 = f(3, 0, n), f(0, 2, n)
(0..n).each{|i| show(e_ary[i], c_ary, [f_ary0[i], f_ary1[i]])}
p ""
e_ary = E_2k(7, n)
c_ary = [1]
f_ary0 = f(2, 1, n)
(0..n).each{|i| show(e_ary[i], c_ary, [f_ary0[i]])}
p ""
e_ary = E_2k(8, n)
c_ary = [1617, 2000]
f_ary0, f_ary1 = f(4, 0, n), f(1, 2, n)
(0..n).each{|i| show(e_ary[i], c_ary, [f_ary0[i], f_ary1[i]])}
p ""
e_ary = E_2k(9, n)
c_ary = [38367, 5500]
f_ary0, f_ary1 = f(3, 1, n), f(0, 3, n)
(0..n).each{|i| show(e_ary[i], c_ary, [f_ary0[i], f_ary1[i]])}
p ""
e_ary = E_2k(10, n)
c_ary = [53361, 121250]
f_ary0, f_ary1 = f(5, 0, n), f(2, 2, n)
(0..n).each{|i| show(e_ary[i], c_ary, [f_ary0[i], f_ary1[i]])}
p ""
e_ary = E_2k(11, n)
c_ary = [57183, 20500]
f_ary0, f_ary1 = f(4, 1, n), f(1, 3, n)
(0..n).each{|i| show(e_ary[i], c_ary, [f_ary0[i], f_ary1[i]])}
p ""
e_ary = E_2k(12, n)
c_ary = [49679091, 176400000, 10285000]
f_ary0, f_ary1, f_ary2 = f(6, 0, n), f(3, 2, n), f(0, 4, n)
(0..n).each{|i| show(e_ary[i], c_ary, [f_ary0[i], f_ary1[i], f_ary2[i]])}
p ""
e_ary = E_2k(13, n)
c_ary = [392931, 265000]
f_ary0, f_ary1 = f(5, 1, n), f(2, 3, n)
(0..n).each{|i| show(e_ary[i], c_ary, [f_ary0[i], f_ary1[i]])}
p ""
e_ary = E_2k(14, n)
c_ary = [489693897, 2507636250, 395450000]
f_ary0, f_ary1, f_ary2 = f(7, 0, n), f(4, 2, n), f(1, 4, n)
(0..n).each{|i| show(e_ary[i], c_ary, [f_ary0[i], f_ary1[i], f_ary2[i]])}
p ""
e_ary = E_2k(15, n)
c_ary = [815806500201, 881340705000, 26021050000]
f_ary0, f_ary1, f_ary2 = f(6, 1, n), f(3, 3, n), f(0, 5, n)
(0..n).each{|i| show(e_ary[i], c_ary, [f_ary0[i], f_ary1[i], f_ary2[i]])}
p ""
e_ary = E_2k(16, n)
c_ary = [764412173217, 5323905468000, 1621003400000]
f_ary0, f_ary1, f_ary2 = f(8, 0, n), f(5, 2, n), f(2, 4, n)
(0..n).each{|i| show(e_ary[i], c_ary, [f_ary0[i], f_ary1[i], f_ary2[i]])}
p ""

出力結果
691 = 441 * 1 + 250 * 1
65520 = 441 * 720 - 250 * 1008
134250480 = 441 * 179280 + 250 * 220752
11606736960 = 441 * 16954560 + 250 * 16519104
274945048560 = 441 * 396974160 + 250 * 399517776
3199218815520 = 441 * 4632858720 + 250 * 4624512480
23782204031040 = 441 * 34413301440 + 250 * 34423752384
129554448266880 = 441 * 187477879680 + 250 * 187506813312
563087459516400 = 441 * 814940600400 + 250 * 814794618960
2056098632318640 = 441 * 2975469665040 + 250 * 2975666040144
6555199353000480 = 441 * 9486467837280 + 250 * 9486668147040
""
1 = 1 * 1
-24 = -1 * 24
-196632 = -1 * 196632
-38263776 = -1 * 38263776
-1610809368 = -1 * 1610809368
-29296875024 = -1 * 29296875024
-313495116768 = -1 * 313495116768
-2325336249792 = -1 * 2325336249792
-13195750342680 = -1 * 13195750342680
-61004818143672 = -1 * 61004818143672
-240029297071632 = -1 * 240029297071632
""
3617 = 1617 * 1 + 2000 * 1
16320 = 1617 * 960 - 2000 * 768
534790080 = 1617 * 354240 - 2000 * 19008
234174178560 = 1617 * 61543680 + 2000 * 67329024
17524001357760 = 1617 * 4858169280 + 2000 * 4834170816
498046875016320 = 1617 * 137745912960 + 2000 * 137655866880
7673653657232640 = 1617 * 2120861041920 + 2000 * 2122110676224
77480203842286080 = 1617 * 21423820362240 + 2000 * 21418943158272
574226476491096000 = 1617 * 158753769048000 + 2000 * 158760815970240
3360143509958850240 = 1617 * 928983317334720 + 2000 * 928988742914304
16320498047409790080 = 1617 * 4512174992346240 + 2000 * 4512155542392960
""
43867 = 38367 * 1 + 5500 * 1
-28728 = 38367 * 216 - 5500 * 1512
-3765465144 = -38367 * 200232 + 5500 * 712152
-3709938631392 = -38367 * 85500576 - 5500 * 78097824
-493547047383096 = -38367 * 11218984488 - 5500 * 11474230824
-21917724609403728 = -38367 * 499862636784 - 5500 * 498089967984
-486272786232443616 = -38367 * 11084671590048 - 5500 * 11088580243104
-6683009405824511424 = -38367 * 152346382155072 - 5500 * 152351956669248
-64690198594597187640 = -38367 * 1474691273530920 - 5500 * 1474676091461160
-479102079577959825624 = -38367 * 10921720940625672 - 5500 * 10921529499813576
-2872821917728374840144 = -38367 * 65489246355989232 - 5500 * 65490182325115632
""
174611 = 53361 * 1 + 121250 * 1
13200 = 53361 * 1200 - 121250 * 528
6920614800 = 53361 * 586800 - 121250 * 201168
15341851377600 = 53361 * 148641600 + 121250 * 61114944
3628395292275600 = 53361 * 20400279600 + 121250 * 20946935856
251770019531263200 = 53361 * 1439038231200 + 121250 * 1443146395680
8043563916910526400 = 53361 * 46093334702400 + 121250 * 46053422547264
150465416446925500800 = 53361 * 861697555612800 + 121250 * 861726789128832
1902324110996589786000 = 53361 * 10894180752126000 + 121250 * 10894843149545520
17831242688625346952400 = 53361 * 102121497049868400 + 121250 * 102119072037503664
132000251770026451864800 = 53361 * 755966260027216800 + 121250 * 755968133350219680
""
77683 = 57183 * 1 + 20500 * 1
-552 = 57183 * 456 - 20500 * 1272
-1157628456 = -57183 * 146232 + 20500 * 351432
-5774114968608 = -57183 * 133082976 + 20500 * 89559456
-2427722831757864 = -57183 * 32170154808 - 20500 * 28689603384
-263214111328125552 = -57183 * 3378441902544 - 20500 * 3415837464144
-12109202528761173024 = -57183 * 155862776255328 - 20500 * 155926897275744
-308317316973972772416 = -57183 * 3969266446940352 - 20500 * 3967939206760128
-5091303792066668003880 = -57183 * 65538944782146360 - 20500 * 65540990858009400
-60399282006368937251976 = -57183 * 777506848190979672 - 20500 * 777517458842153496
-552000263214112485753456 = -57183 * 7105808014591457232 - 20500 * 7105797244669716432
""
236364091 = 49679091 * 1 + 176400000 * 1 + 10285000 * 1
131040 = 49679091 * 1440 - 176400000 * 288 - 10285000 * 2016
1099243323360 = 49679091 * 876960 - 176400000 * 325728 + 10285000 * 1457568
12336522153621120 = 49679091 * 292072320 + 176400000 * 11700864 - 10285000 * 411997824
9221121336284413920 = 49679091 * 57349833120 + 176400000 * 35176468896 + 10285000 * 16227967392
1562118530273437631040 = 49679091 * 6660135541440 + 176400000 * 6601058210880 + 10285000 * 6497071680960
103486260766565509822080 = 49679091 * 436536302762880 + 176400000 * 438061091013504 + 10285000 * 440015323483008
3586400651444203277717760 = 49679091 * 15172132360815360 + 176400000 * 15173572442740992 + 10285000 * 15172068869975808
77352372210526124884754400 = 49679091 * 327295477379498400 + 176400000 * 327251435243536800 + 10285000 * 327221898778968480
1161399411211600265764157280 = 49679091 * 4913576699608450080 + 176400000 * 4913611331706352224 + 10285000 * 4913597307075535008
13104001562118531372680823360 = 49679091 * 55439481453769056960 + 176400000 * 55439979246339307200 + 10285000 * 55440561879404210880
""
657931 = 392931 * 1 + 265000 * 1
-24 = 392931 * 696 - 265000 * 1032
-805306392 = -392931 * 34632 + 265000 * 48312
-20334926626656 = -392931 * 167186976 + 265000 * 171162336
-27021598569529368 = -392931 * 64422848328 - 265000 * 6444771144
-7152557373046875024 = -392931 * 11387712944304 - 265000 * 10105554483504
-682326933054044766048 = -392931 * 1037073232984608 - 265000 * 1037089473751584
-32185646871935157619392 = -392931 * 48892286706157632 - 265000 * 48959817978105408
-906694391732570450559000 = -392931 * 1378097272692189000 - 265000 * 1378102838778701640
-17229551704624797057112632 = -392931 * 26188038166214133672 - 265000 * 26186640301645703016
-240000007152557373852181392 = -392931 * 364779879415169299632 - 265000 * 364779940958775418032
""
3392780147 = 489693897 * 1 + 2507636250 * 1 + 395450000 * 1
6960 = 489693897 * 1680 - 2507636250 * 48 - 395450000 * 1776
934155393840 = 489693897 * 1224720 - 2507636250 * 392688 + 395450000 * 975888
53074158495516480 = 489693897 * 505659840 - 2507636250 * 67089216 - 395450000 * 66529344
125380214560150002480 = 489693897 * 129351117840 + 2507636250 * 37279185936 - 395450000 * 79516693488
51856040954589843756960 = 489693897 * 21060890131680 + 2507636250 * 15066490704480 + 395450000 * 9511628122080
7123493021854278627673920 = 489693897 * 2160822606183360 + 2507636250 * 2098369148842944 + 395450000 * 2031621786790848
457358042050198589771226240 = 489693897 * 134717272385473920 + 2507636250 * 134803101024250752 + 395450000 * 134911299030780288
16828247534415852672059972400 = 489693897 * 4957295423282269200 + 2507636250 * 4960096515113176080 + 395450000 * 4962883791154433040
404722169541211889603611092720 = 489693897 * 119288258695393463760 + 2507636250 * 119289357755096403984 + 395450000 * 119289719378991436368
6960000051856040955523999143840 = 489693897 * 2051465861242156554720 + 2507636250 * 2051412780505054295520 + 395450000 * 2051366007318600561120
""
1723168255201 = 815806500201 * 1 + 881340705000 * 1 + 26021050000 * 1
-171864 = 815806500201 * 936 - 881340705000 * 792 - 26021050000 * 2520
-92268782591832 = 815806500201 * 134568 - 881340705000 * 197208 + 26021050000 * 2457000
-11795091175438423776 = -815806500201 * 173988576 + 881340705000 * 180534816 - 26021050000 * 1113204960
-49536425459206569762648 = -815806500201 * 104617833048 + 881340705000 * 34731625896 + 26021050000 * 199879986600
-32012164592742919922046864 = -815806500201 * 27210540914064 - 881340705000 * 11282282306064 + 26021050000 * 4992350445936
-6332441368275869747902027488 = -815806500201 * 3910401774129888 - 881340705000 * 3475192229286624 - 26021050000 * 3054519828108000
-553385882817076320573218661312 = -815806500201 * 322823174243838912 - 881340705000 * 319729598062193088 - 26021050000 * 316433406335739840
-26594665913504249904864455466840 = -815806500201 * 15429983442476298840 - 881340705000 * 15436589476561121880 - 26021050000 * 15444821445342229080
-809501558423540417400141934830072 = -815806500201 * 469709326015243815672 - 881340705000 * 469831003553540798136 - 26021050000 * 469944493113793897080
-17186400032012164592835188704466832 = -815806500201 * 9973673112569954220432 - 881340705000 * 9973761497118317484432 - 26021050000 * 9973874479528786860432
""
7709321041217 = 764412173217 * 1 + 5323905468000 * 1 + 1621003400000 * 1
32640 = 764412173217 * 1920 + 5323905468000 * 192 - 1621003400000 * 1536
70093866303360 = 764412173217 * 1630080 - 5323905468000 * 402048 + 1621003400000 * 551808
20160859654708062720 = 764412173217 * 803228160 - 5323905468000 * 161431296 + 1621003400000 * 163854336
150525431711563807489920 = 764412173217 * 253366181760 + 5323905468000 * 20329262976 - 1621003400000 * 93387735168
151991844177246093750032640 = 764412173217 * 53205643249920 + 5323905468000 * 23865942948480 - 1621003400000 * 9709554816000
43295116458269350559666465280 = 764412173217 * 7498254194403840 + 5323905468000 * 5794392238723584 + 1621003400000 * 4142226444876288
5149788469617367127914995164160 = 764412173217 * 699684356363412480 + 5323905468000 * 671204645516954112 + 1621003400000 * 642510156233453568
323250903208723929093223124860800 = 764412173217 * 42100628403784982400 + 5323905468000 * 41947216018774335360 + 1621003400000 * 41792421673548259200
12452826654927532105218787405188480 = 764412173217 * 1614922125605880493440 + 5323905468000 * 1615253348424607402944 + 1621003400000 * 1615606968766288470528
326400000151991844177316187616303360 = 764412173217 * 42332208491309728078080 + 5323905468000 * 42337765240473386384640 + 1621003400000 * 42343208407470359036160
""

2017年2月4日土曜日

170204

新たな整数列(22)

https://oeis.org/A281746
が追加されました。

2017年1月28日土曜日

170128

整数列のLINKS の編集(87)

https://oeis.org/A280556
のLINKS を編集しました。

2017年1月24日火曜日

170124

Ruby


Numerator of Bernoulli(36 * 37) ł 37

Bernoulli(2 * 666) の分子は37で割り切れないが、
Bernoulli(2 * 777) の分子は37で割り切れる。

def bernoulli(n)
  ary = []
  a = []
  (0..n).each{|i|
    a << 1r / (i + 1)
    i.downto(1){|j| a[j - 1] = j * (a[j - 1] - a[j])}
    ary << a[0] # Bn = a[0]
  }
  ary
end

def A(k, n)
  a = bernoulli(2 * n)
  ary = []
  (0..n).each{|i|
    j = a[2 * i].numerator
    ary << i if j % k == 0
  }
  ary
end

n = 777
p A(37, n)

出力結果
[16, 34, 37, 52, 70, 74, 88, 106, 111, 124, 142, 148, 160, 178, 185, 196, 214, 222, 232, 250, 259, 268, 286, 296, 304, 322, 333, 340, 358, 370, 376, 394, 407, 412, 430, 444, 448, 466, 481, 484, 502, 518, 520, 538, 555, 556, 574, 592, 610, 628, 629, 646, 664, 682, 700, 703, 718, 736, 740, 754, 772, 777]

2017年1月16日月曜日

170116(3)

Ruby


2017の素因数分解がつくる多角形(5)

五角形、七角形バージョンをたくさん作ってみた。
ただし、凸多角形の判定は行っていない。

require 'prime'

# m次以下を取り出す
def mul(f_ary, b_ary, m)
  s1, s2 = f_ary.size, b_ary.size
  ary = Array.new(s1 + s2 - 1, 0)
  (0..s1 - 1).each{|i|
    (0..s2 - 1).each{|j|
      ary[i + j] += f_ary[i] * b_ary[j]
    }
  }
  ary[0..m]
end

def f(k, ary)
  a = Array.new(k, 0)
  (0..ary.size - 1).each{|i|
    a[i % k] += ary[i]
  }
  a
end

def g(ary)
  m = ary.min
  ary.map{|i| i - m}
end

# 最初以外0か?
def h0(ary)
  m = ary.size
  flag = true
  (1..m - 1).each{|i| flag = false if ary[i] != 0}
  flag
end

def w(ary)
  m = ary.size
  a = []
  (1..m - 1).each{|i|
    b = Array.new(m, 0)
    (0..m - 1).each{|j|
      b[i * j % m] += ary[j]
    }
    a << b
  }
  a
end

def x0(k, w, m, n)
  b = w[0]
  (1..k - 2).each{|i|
    b = f(k, mul(b, w[i], n))
  }
  b = g(b)
  return w[0] if h0(b) && b[0] == m
end

def find(k, m, max, n)
  (0..max).to_a.repeated_permutation(k){|c|
    a = x0(k, w(c), m, n)
    return a if a != nil
  }
end

# 最後だけ0か?
def h(ary)
  m = ary.size
  flag = true
  (0..m - 2).each{|i| flag = false if ary[i] == 0}
  flag = false if ary[m - 1] != 0
  flag
end

# 共役か?
def v(ary1, ary2)
  m = ary2[0] - ary1[0]
  ary2 = ary2.map{|i| i - m}
  ary1 == [ary2[0]] + ary2[1..-1].reverse
end

def x(k, w, n)
  (0..k - 1).each{|i|
    ary = []
    (1..k - 1).each{|j|
      ary << w[j - 1].rotate(i * j)
    }
    k0 = (k - 1) / 2
    ary.combination(k0){|c|
      b = c[0]
      (1..k0 - 1).each{|j|
        b = f(k, mul(b, c[j], n))
      }
      b2 = g(f(k, mul(b, b, n)))
      a = ary - c
      d = a[0]
      (1..k0 - 1).each{|j|
        d = f(k, mul(d, a[j], n))
      }
      gb = g(b)
      gd = g(d)
      p [k, i, b2, g(f(k, mul(gb, gd, n)))] if h(b2) && v(gb, gd)
    }
  }
end

max = 5
n = 100
ary = Prime.each(500).to_a
[5, 7].each{|i|
  ary.each{|j|
    if j % i == 1
      x(i, w(find(i, j, max, n)), n)
      p ''
    end
  }
}

出力結果
[5, 1, [8, 12, 9, 12, 0], [11, 0, 0, 0, 0]]
[5, 2, [12, 12, 8, 9, 0], [11, 0, 0, 0, 0]]
[5, 3, [9, 8, 12, 12, 0], [11, 0, 0, 0, 0]]
[5, 4, [12, 9, 12, 8, 0], [11, 0, 0, 0, 0]]
""
[5, 0, [3, 31, 15, 27, 0], [31, 0, 0, 0, 0]]
[5, 1, [27, 15, 31, 3, 0], [31, 0, 0, 0, 0]]
[5, 2, [31, 27, 3, 15, 0], [31, 0, 0, 0, 0]]
[5, 4, [15, 3, 27, 31, 0], [31, 0, 0, 0, 0]]
""
[5, 0, [8, 24, 21, 48, 0], [41, 0, 0, 0, 0]]
[5, 2, [48, 21, 24, 8, 0], [41, 0, 0, 0, 0]]
[5, 3, [21, 8, 48, 24, 0], [41, 0, 0, 0, 0]]
[5, 4, [24, 48, 8, 21, 0], [41, 0, 0, 0, 0]]
""
[5, 1, [21, 48, 40, 72, 0], [61, 0, 0, 0, 0]]
[5, 2, [48, 72, 21, 40, 0], [61, 0, 0, 0, 0]]
[5, 3, [40, 21, 72, 48, 0], [61, 0, 0, 0, 0]]
[5, 4, [72, 40, 48, 21, 0], [61, 0, 0, 0, 0]]
""
[5, 0, [51, 87, 39, 59, 0], [71, 0, 0, 0, 0]]
[5, 1, [39, 51, 59, 87, 0], [71, 0, 0, 0, 0]]
[5, 3, [87, 59, 51, 39, 0], [71, 0, 0, 0, 0]]
[5, 4, [59, 39, 87, 51, 0], [71, 0, 0, 0, 0]]
""
[5, 0, [64, 88, 88, 121, 0], [101, 0, 0, 0, 0]]
[5, 1, [88, 64, 121, 88, 0], [101, 0, 0, 0, 0]]
[5, 3, [88, 121, 64, 88, 0], [101, 0, 0, 0, 0]]
[5, 4, [121, 88, 88, 64, 0], [101, 0, 0, 0, 0]]
""
[5, 0, [72, 60, 113, 156, 0], [131, 0, 0, 0, 0]]
[5, 2, [156, 113, 60, 72, 0], [131, 0, 0, 0, 0]]
[5, 3, [113, 72, 156, 60, 0], [131, 0, 0, 0, 0]]
[5, 4, [60, 156, 72, 113, 0], [131, 0, 0, 0, 0]]
""
[5, 0, [36, 132, 88, 165, 0], [151, 0, 0, 0, 0]]
[5, 2, [165, 88, 132, 36, 0], [151, 0, 0, 0, 0]]
[5, 3, [88, 36, 165, 132, 0], [151, 0, 0, 0, 0]]
[5, 4, [132, 165, 36, 88, 0], [151, 0, 0, 0, 0]]
""
[5, 1, [216, 168, 105, 112, 0], [181, 0, 0, 0, 0]]
[5, 2, [168, 112, 216, 105, 0], [181, 0, 0, 0, 0]]
[5, 3, [105, 216, 112, 168, 0], [181, 0, 0, 0, 0]]
[5, 4, [112, 105, 168, 216, 0], [181, 0, 0, 0, 0]]
""
[5, 0, [188, 201, 180, 192, 0], [191, 0, 0, 0, 0]]
[5, 1, [180, 188, 192, 201, 0], [191, 0, 0, 0, 0]]
[5, 3, [201, 192, 188, 180, 0], [191, 0, 0, 0, 0]]
[5, 4, [192, 180, 201, 188, 0], [191, 0, 0, 0, 0]]
""
[5, 0, [20, 236, 80, 125, 0], [211, 0, 0, 0, 0]]
[5, 1, [125, 80, 236, 20, 0], [211, 0, 0, 0, 0]]
[5, 2, [236, 125, 20, 80, 0], [211, 0, 0, 0, 0]]
[5, 4, [80, 20, 125, 236, 0], [211, 0, 0, 0, 0]]
""
[5, 0, [173, 104, 296, 128, 0], [241, 0, 0, 0, 0]]
[5, 2, [128, 296, 104, 173, 0], [241, 0, 0, 0, 0]]
[5, 3, [296, 173, 128, 104, 0], [241, 0, 0, 0, 0]]
[5, 4, [104, 128, 173, 296, 0], [241, 0, 0, 0, 0]]
""
[5, 0, [133, 304, 76, 148, 0], [251, 0, 0, 0, 0]]
[5, 1, [76, 133, 148, 304, 0], [251, 0, 0, 0, 0]]
[5, 3, [304, 148, 133, 76, 0], [251, 0, 0, 0, 0]]
[5, 4, [148, 76, 304, 133, 0], [251, 0, 0, 0, 0]]
""
[5, 0, [36, 93, 100, 312, 0], [271, 0, 0, 0, 0]]
[5, 2, [312, 100, 93, 36, 0], [271, 0, 0, 0, 0]]
[5, 3, [100, 36, 312, 93, 0], [271, 0, 0, 0, 0]]
[5, 4, [93, 312, 36, 100, 0], [271, 0, 0, 0, 0]]
""
[5, 0, [155, 315, 195, 291, 0], [281, 0, 0, 0, 0]]
[5, 1, [195, 155, 291, 315, 0], [281, 0, 0, 0, 0]]
[5, 3, [315, 291, 155, 195, 0], [281, 0, 0, 0, 0]]
[5, 4, [291, 195, 315, 155, 0], [281, 0, 0, 0, 0]]
""
[5, 0, [7, 115, 91, 343, 0], [311, 0, 0, 0, 0]]
[5, 2, [343, 91, 115, 7, 0], [311, 0, 0, 0, 0]]
[5, 3, [91, 7, 343, 115, 0], [311, 0, 0, 0, 0]]
[5, 4, [115, 343, 7, 91, 0], [311, 0, 0, 0, 0]]
""
[5, 0, [212, 149, 332, 368, 0], [331, 0, 0, 0, 0]]
[5, 2, [368, 332, 149, 212, 0], [331, 0, 0, 0, 0]]
[5, 3, [332, 212, 368, 149, 0], [331, 0, 0, 0, 0]]
[5, 4, [149, 368, 212, 332, 0], [331, 0, 0, 0, 0]]
""
[5, 0, [96, 408, 225, 392, 0], [401, 0, 0, 0, 0]]
[5, 2, [392, 225, 408, 96, 0], [401, 0, 0, 0, 0]]
[5, 3, [225, 96, 392, 408, 0], [401, 0, 0, 0, 0]]
[5, 4, [408, 392, 96, 225, 0], [401, 0, 0, 0, 0]]
""
[5, 1, [405, 480, 336, 400, 0], [421, 0, 0, 0, 0]]
[5, 2, [480, 400, 405, 336, 0], [421, 0, 0, 0, 0]]
[5, 3, [336, 405, 400, 480, 0], [421, 0, 0, 0, 0]]
[5, 4, [400, 336, 480, 405, 0], [421, 0, 0, 0, 0]]
""
[5, 0, [173, 24, 276, 468, 0], [431, 0, 0, 0, 0]]
[5, 1, [24, 468, 173, 276, 0], [431, 0, 0, 0, 0]]
[5, 2, [276, 173, 468, 24, 0], [431, 0, 0, 0, 0]]
[5, 3, [468, 276, 24, 173, 0], [431, 0, 0, 0, 0]]
""
[5, 1, [560, 360, 216, 225, 0], [461, 0, 0, 0, 0]]
[5, 2, [360, 225, 560, 216, 0], [461, 0, 0, 0, 0]]
[5, 3, [216, 560, 225, 360, 0], [461, 0, 0, 0, 0]]
[5, 4, [225, 216, 360, 560, 0], [461, 0, 0, 0, 0]]
""
[5, 0, [496, 388, 565, 412, 0], [491, 0, 0, 0, 0]]
[5, 2, [412, 565, 388, 496, 0], [491, 0, 0, 0, 0]]
[5, 3, [565, 496, 412, 388, 0], [491, 0, 0, 0, 0]]
[5, 4, [388, 412, 496, 565, 0], [491, 0, 0, 0, 0]]
""
[7, 0, [24, 4, 12, 25, 28, 20, 0], [29, 0, 0, 0, 0, 0, 0]]
[7, 1, [25, 24, 28, 4, 20, 12, 0], [29, 0, 0, 0, 0, 0, 0]]
[7, 3, [12, 20, 4, 28, 24, 25, 0], [29, 0, 0, 0, 0, 0, 0]]
[7, 4, [20, 28, 25, 12, 4, 24, 0], [29, 0, 0, 0, 0, 0, 0]]
[7, 5, [4, 25, 20, 24, 12, 28, 0], [29, 0, 0, 0, 0, 0, 0]]
[7, 6, [28, 12, 24, 20, 25, 4, 0], [29, 0, 0, 0, 0, 0, 0]]
""
[7, 0, [16, 13, 16, 16, 28, 52, 0], [43, 0, 0, 0, 0, 0, 0]]
[7, 1, [16, 16, 28, 13, 52, 16, 0], [43, 0, 0, 0, 0, 0, 0]]
[7, 3, [16, 52, 13, 28, 16, 16, 0], [43, 0, 0, 0, 0, 0, 0]]
[7, 4, [52, 28, 16, 16, 13, 16, 0], [43, 0, 0, 0, 0, 0, 0]]
[7, 5, [13, 16, 52, 16, 16, 28, 0], [43, 0, 0, 0, 0, 0, 0]]
[7, 6, [28, 16, 16, 52, 16, 13, 0], [43, 0, 0, 0, 0, 0, 0]]
""
[7, 0, [40, 16, 8, 12, 45, 76, 0], [71, 0, 0, 0, 0, 0, 0]]
[7, 1, [16, 12, 76, 40, 8, 45, 0], [71, 0, 0, 0, 0, 0, 0]]
[7, 2, [8, 76, 16, 45, 40, 12, 0], [71, 0, 0, 0, 0, 0, 0]]
[7, 3, [12, 40, 45, 16, 76, 8, 0], [71, 0, 0, 0, 0, 0, 0]]
[7, 4, [45, 8, 40, 76, 12, 16, 0], [71, 0, 0, 0, 0, 0, 0]]
[7, 5, [76, 45, 12, 8, 16, 40, 0], [71, 0, 0, 0, 0, 0, 0]]
""
[7, 0, [108, 61, 92, 56, 96, 8, 0], [113, 0, 0, 0, 0, 0, 0]]
[7, 1, [92, 8, 61, 96, 108, 56, 0], [113, 0, 0, 0, 0, 0, 0]]
[7, 2, [96, 92, 108, 8, 56, 61, 0], [113, 0, 0, 0, 0, 0, 0]]
[7, 4, [61, 56, 8, 108, 92, 96, 0], [113, 0, 0, 0, 0, 0, 0]]
[7, 5, [56, 108, 96, 61, 8, 92, 0], [113, 0, 0, 0, 0, 0, 0]]
[7, 6, [8, 96, 56, 92, 61, 108, 0], [113, 0, 0, 0, 0, 0, 0]]
""
[7, 1, [93, 24, 16, 60, 108, 120, 0], [127, 0, 0, 0, 0, 0, 0]]
[7, 2, [24, 60, 120, 93, 16, 108, 0], [127, 0, 0, 0, 0, 0, 0]]
[7, 3, [16, 120, 24, 108, 93, 60, 0], [127, 0, 0, 0, 0, 0, 0]]
[7, 4, [60, 93, 108, 24, 120, 16, 0], [127, 0, 0, 0, 0, 0, 0]]
[7, 5, [108, 16, 93, 120, 60, 24, 0], [127, 0, 0, 0, 0, 0, 0]]
[7, 6, [120, 108, 60, 16, 24, 93, 0], [127, 0, 0, 0, 0, 0, 0]]
""
[7, 0, [12, 161, 12, 152, 140, 28, 0], [197, 0, 0, 0, 0, 0, 0]]
[7, 1, [28, 140, 152, 12, 161, 12, 0], [197, 0, 0, 0, 0, 0, 0]]
[7, 2, [152, 12, 140, 161, 28, 12, 0], [197, 0, 0, 0, 0, 0, 0]]
[7, 3, [161, 152, 28, 12, 12, 140, 0], [197, 0, 0, 0, 0, 0, 0]]
[7, 5, [140, 12, 12, 28, 152, 161, 0], [197, 0, 0, 0, 0, 0, 0]]
[7, 6, [12, 28, 161, 140, 12, 152, 0], [197, 0, 0, 0, 0, 0, 0]]
""
[7, 0, [216, 213, 168, 240, 188, 180, 0], [211, 0, 0, 0, 0, 0, 0]]
[7, 1, [188, 168, 216, 180, 240, 213, 0], [211, 0, 0, 0, 0, 0, 0]]
[7, 2, [213, 240, 180, 216, 168, 188, 0], [211, 0, 0, 0, 0, 0, 0]]
[7, 3, [180, 188, 240, 168, 213, 216, 0], [211, 0, 0, 0, 0, 0, 0]]
[7, 4, [168, 180, 213, 188, 216, 240, 0], [211, 0, 0, 0, 0, 0, 0]]
[7, 6, [240, 216, 188, 213, 180, 168, 0], [211, 0, 0, 0, 0, 0, 0]]
""
[7, 0, [272, 168, 153, 40, 128, 80, 0], [239, 0, 0, 0, 0, 0, 0]]
[7, 1, [153, 80, 168, 128, 272, 40, 0], [239, 0, 0, 0, 0, 0, 0]]
[7, 2, [128, 153, 272, 80, 40, 168, 0], [239, 0, 0, 0, 0, 0, 0]]
[7, 4, [168, 40, 80, 272, 153, 128, 0], [239, 0, 0, 0, 0, 0, 0]]
[7, 5, [40, 272, 128, 168, 80, 153, 0], [239, 0, 0, 0, 0, 0, 0]]
[7, 6, [80, 128, 40, 153, 168, 272, 0], [239, 0, 0, 0, 0, 0, 0]]
""
[7, 0, [116, 140, 337, 68, 76, 160, 0], [281, 0, 0, 0, 0, 0, 0]]
[7, 1, [337, 160, 140, 76, 116, 68, 0], [281, 0, 0, 0, 0, 0, 0]]
[7, 2, [76, 337, 116, 160, 68, 140, 0], [281, 0, 0, 0, 0, 0, 0]]
[7, 4, [140, 68, 160, 116, 337, 76, 0], [281, 0, 0, 0, 0, 0, 0]]
[7, 5, [68, 116, 76, 140, 160, 337, 0], [281, 0, 0, 0, 0, 0, 0]]
[7, 6, [160, 76, 68, 337, 140, 116, 0], [281, 0, 0, 0, 0, 0, 0]]
""
[7, 0, [360, 236, 120, 21, 96, 204, 0], [337, 0, 0, 0, 0, 0, 0]]
[7, 1, [236, 21, 204, 360, 120, 96, 0], [337, 0, 0, 0, 0, 0, 0]]
[7, 2, [120, 204, 236, 96, 360, 21, 0], [337, 0, 0, 0, 0, 0, 0]]
[7, 3, [21, 360, 96, 236, 204, 120, 0], [337, 0, 0, 0, 0, 0, 0]]
[7, 4, [96, 120, 360, 204, 21, 236, 0], [337, 0, 0, 0, 0, 0, 0]]
[7, 5, [204, 96, 21, 120, 236, 360, 0], [337, 0, 0, 0, 0, 0, 0]]
""
[7, 0, [240, 249, 168, 344, 360, 432, 0], [379, 0, 0, 0, 0, 0, 0]]
[7, 1, [344, 240, 360, 249, 432, 168, 0], [379, 0, 0, 0, 0, 0, 0]]
[7, 3, [168, 432, 249, 360, 240, 344, 0], [379, 0, 0, 0, 0, 0, 0]]
[7, 4, [432, 360, 344, 168, 249, 240, 0], [379, 0, 0, 0, 0, 0, 0]]
[7, 5, [249, 344, 432, 240, 168, 360, 0], [379, 0, 0, 0, 0, 0, 0]]
[7, 6, [360, 168, 240, 432, 344, 249, 0], [379, 0, 0, 0, 0, 0, 0]]
""
[7, 0, [351, 99, 243, 483, 259, 183, 0], [421, 0, 0, 0, 0, 0, 0]]
[7, 1, [259, 243, 351, 183, 483, 99, 0], [421, 0, 0, 0, 0, 0, 0]]
[7, 2, [99, 483, 183, 351, 243, 259, 0], [421, 0, 0, 0, 0, 0, 0]]
[7, 3, [183, 259, 483, 243, 99, 351, 0], [421, 0, 0, 0, 0, 0, 0]]
[7, 4, [243, 183, 99, 259, 351, 483, 0], [421, 0, 0, 0, 0, 0, 0]]
[7, 6, [483, 351, 259, 99, 183, 243, 0], [421, 0, 0, 0, 0, 0, 0]]
""
[7, 0, [376, 232, 212, 469, 452, 416, 0], [449, 0, 0, 0, 0, 0, 0]]
[7, 2, [416, 452, 469, 212, 232, 376, 0], [449, 0, 0, 0, 0, 0, 0]]
[7, 3, [452, 212, 376, 416, 469, 232, 0], [449, 0, 0, 0, 0, 0, 0]]
[7, 4, [469, 376, 452, 232, 416, 212, 0], [449, 0, 0, 0, 0, 0, 0]]
[7, 5, [212, 416, 232, 452, 376, 469, 0], [449, 0, 0, 0, 0, 0, 0]]
[7, 6, [232, 469, 416, 376, 212, 452, 0], [449, 0, 0, 0, 0, 0, 0]]
""
[7, 1, [180, 132, 60, 540, 160, 105, 0], [463, 0, 0, 0, 0, 0, 0]]
[7, 2, [132, 540, 105, 180, 60, 160, 0], [463, 0, 0, 0, 0, 0, 0]]
[7, 3, [60, 105, 132, 160, 180, 540, 0], [463, 0, 0, 0, 0, 0, 0]]
[7, 4, [540, 180, 160, 132, 105, 60, 0], [463, 0, 0, 0, 0, 0, 0]]
[7, 5, [160, 60, 180, 105, 540, 132, 0], [463, 0, 0, 0, 0, 0, 0]]
[7, 6, [105, 160, 540, 60, 132, 180, 0], [463, 0, 0, 0, 0, 0, 0]]
""
[7, 1, [65, 72, 560, 128, 136, 216, 0], [491, 0, 0, 0, 0, 0, 0]]
[7, 2, [72, 128, 216, 65, 560, 136, 0], [491, 0, 0, 0, 0, 0, 0]]
[7, 3, [560, 216, 72, 136, 65, 128, 0], [491, 0, 0, 0, 0, 0, 0]]
[7, 4, [128, 65, 136, 72, 216, 560, 0], [491, 0, 0, 0, 0, 0, 0]]
[7, 5, [136, 560, 65, 216, 128, 72, 0], [491, 0, 0, 0, 0, 0, 0]]
[7, 6, [216, 136, 128, 560, 72, 65, 0], [491, 0, 0, 0, 0, 0, 0]]
""

170116(2)

Ruby


2017の素因数分解がつくる多角形(4)

組み合わせてみた。

# m次以下を取り出す
def mul(f_ary, b_ary, m)
  s1, s2 = f_ary.size, b_ary.size
  ary = Array.new(s1 + s2 - 1, 0)
  (0..s1 - 1).each{|i|
    (0..s2 - 1).each{|j|
      ary[i + j] += f_ary[i] * b_ary[j]
    }
  }
  ary[0..m]
end

def f(k, ary)
  a = Array.new(k, 0)
  (0..ary.size - 1).each{|i|
    a[i % k] += ary[i]
  }
  a
end

def g(ary)
  m = ary.min
  ary.map{|i| i - m}
end

# 最初以外0か?
def h0(ary)
  m = ary.size
  flag = true
  (1..m - 1).each{|i| flag = false if ary[i] != 0}
  flag
end

def w(ary)
  m = ary.size
  a = []
  (1..m - 1).each{|i|
    b = Array.new(m, 0)
    (0..m - 1).each{|j|
      b[i * j % m] += ary[j]
    }
    a << b
  }
  a
end

def x0(k, w, m, n)
  b = w[0]
  (1..k - 2).each{|i|
    b = f(k, mul(b, w[i], n))
  }
  b = g(b)
  return w[0] if h0(b) && b[0] == m
end

def find(k, m, max, n)
  (0..max).to_a.repeated_permutation(k){|c|
    a = x0(k, w(c), m, n)
    return a if a != nil
  }
end

# 最後だけ0か?
def h(ary)
  m = ary.size
  flag = true
  (0..m - 2).each{|i| flag = false if ary[i] == 0}
  flag = false if ary[m - 1] != 0
  flag
end

# 共役か?
def v(ary1, ary2)
  m = ary2[0] - ary1[0]
  ary2 = ary2.map{|i| i - m}
  ary1 == [ary2[0]] + ary2[1..-1].reverse
end

def x(k, w, n)
  (0..k - 1).each{|i|
    ary = []
    (1..k - 1).each{|j|
      ary << w[j - 1].rotate(i * j)
    }
    k0 = (k - 1) / 2
    ary.combination(k0){|c|
      b = c[0]
      (1..k0 - 1).each{|j|
        b = f(k, mul(b, c[j], n))
      }
      b2 = g(f(k, mul(b, b, n)))
      a = ary - c
      d = a[0]
      (1..k0 - 1).each{|j|
        d = f(k, mul(d, a[j], n))
      }
      gb = g(b)
      gd = g(d)
      p [k, i, b2, g(f(k, mul(gb, gd, n)))] if h(b2) && v(gb, gd)
    }
  }
end

n = 100
x(3, w(find(3, 7, 3, n)), n)
p ''
x(5, w(find(5, 11, 2, n)), n)
p ''
x(5, w(find(5, 31, 3, n)), n)
p ''
x(7, w(find(7, 2017, 3, n)), n)

出力結果
[3, 0, [5, 8, 0], [7, 0, 0]]
[3, 2, [8, 5, 0], [7, 0, 0]]
""
[5, 1, [8, 12, 9, 12, 0], [11, 0, 0, 0, 0]]
[5, 2, [12, 12, 8, 9, 0], [11, 0, 0, 0, 0]]
[5, 3, [9, 8, 12, 12, 0], [11, 0, 0, 0, 0]]
[5, 4, [12, 9, 12, 8, 0], [11, 0, 0, 0, 0]]
""
[5, 0, [3, 31, 15, 27, 0], [31, 0, 0, 0, 0]]
[5, 1, [27, 15, 31, 3, 0], [31, 0, 0, 0, 0]]
[5, 2, [31, 27, 3, 15, 0], [31, 0, 0, 0, 0]]
[5, 4, [15, 3, 27, 31, 0], [31, 0, 0, 0, 0]]
""
[7, 0, [1716, 1740, 2196, 636, 1664, 1065, 0], [2017, 0, 0, 0, 0, 0, 0]]
[7, 1, [636, 1716, 1664, 1740, 1065, 2196, 0], [2017, 0, 0, 0, 0, 0, 0]]
[7, 3, [2196, 1065, 1740, 1664, 1716, 636, 0], [2017, 0, 0, 0, 0, 0, 0]]
[7, 4, [1065, 1664, 636, 2196, 1740, 1716, 0], [2017, 0, 0, 0, 0, 0, 0]]
[7, 5, [1740, 636, 1065, 1716, 2196, 1664, 0], [2017, 0, 0, 0, 0, 0, 0]]
[7, 6, [1664, 2196, 1716, 1065, 636, 1740, 0], [2017, 0, 0, 0, 0, 0, 0]]

170116

Ruby


2017の素因数分解がつくる多角形(3)

要となるw(ary) のary を求めるプログラムを作ってみた。

# m次以下を取り出す
def mul(f_ary, b_ary, m)
  s1, s2 = f_ary.size, b_ary.size
  ary = Array.new(s1 + s2 - 1, 0)
  (0..s1 - 1).each{|i|
    (0..s2 - 1).each{|j|
      ary[i + j] += f_ary[i] * b_ary[j]
    }
  }
  ary[0..m]
end

def f(k, ary)
  a = Array.new(k, 0)
  (0..ary.size - 1).each{|i|
    a[i % k] += ary[i]
  }
  a
end

def g(ary)
  m = ary.min
  ary.map{|i| i - m}
end

# 最初以外0か?
def h0(ary)
  m = ary.size
  flag = true
  (1..m - 1).each{|i| flag = false if ary[i] != 0}
  flag
end

def w(ary)
  m = ary.size
  a = []
  (1..m - 1).each{|i|
    b = Array.new(m, 0)
    (0..m - 1).each{|j|
      b[i * j % m] += ary[j]
    }
    a << b
  }
  a
end

def x0(k, w, m, n)
  b = w[0]
  (1..k - 2).each{|i|
    b = f(k, mul(b, w[i], n))
  }
  b = g(b)
  return w[0] if h0(b) && b[0] == m
end

def find(k, m, max, n)
  ary = []
  (0..max).to_a.repeated_permutation(k){|c|
    a = x0(k, w(c), m, n)
    ary << a if a != nil
  }
  ary
end

n = 100
p find(3, 7, 3, n)
p ''
p find(5, 11, 2, n)
p ''
p find(5, 31, 3, n)
p ''
p find(7, 2017, 3, n)

出力結果
[[0, 1, 3], [0, 2, 3], [0, 3, 1], [0, 3, 2], [1, 0, 3], [1, 3, 0], [2, 0, 3], [2, 3, 0], [3, 0, 1], [3, 0, 2], [3, 1, 0], [3, 2, 0]]
""
[[0, 0, 0, 1, 2], [0, 0, 0, 2, 1], [0, 0, 1, 0, 2], [0, 0, 1, 1, 2], [0, 0, 1, 2, 0], [0, 0, 2, 0, 1], [0, 0, 2, 1, 0], [0, 0, 2, 1, 1], [0, 1, 0, 0, 2], [0, 1, 0, 1, 2], [0, 1, 0, 2, 0], [0, 1, 0, 2, 1], [0, 1, 1, 2, 0], [0, 1, 1, 2, 2], [0, 1, 2, 0, 0], [0, 1, 2, 0, 1], [0, 1, 2, 1, 2], [0, 1, 2, 2, 2], [0, 2, 0, 0, 1], [0, 2, 0, 1, 0], [0, 2, 1, 0, 0], [0, 2, 1, 0, 1], [0, 2, 1, 1, 0], [0, 2, 1, 2, 1], [0, 2, 1, 2, 2], [0, 2, 2, 1, 1], [0, 2, 2, 1, 2], [0, 2, 2, 2, 1], [1, 0, 0, 0, 2], [1, 0, 0, 2, 0], [1, 0, 0, 2, 1], [1, 0, 1, 0, 2], [1, 0, 1, 2, 0], [1, 0, 2, 0, 0], [1, 0, 2, 1, 0], [1, 0, 2, 1, 2], [1, 0, 2, 2, 1], [1, 0, 2, 2, 2], [1, 1, 0, 0, 2], [1, 1, 0, 2, 2], [1, 1, 2, 0, 0], [1, 1, 2, 2, 0], [1, 2, 0, 0, 0], [1, 2, 0, 0, 1], [1, 2, 0, 1, 0], [1, 2, 0, 1, 2], [1, 2, 0, 2, 2], [1, 2, 1, 0, 2], [1, 2, 1, 2, 0], [1, 2, 2, 0, 1], [1, 2, 2, 0, 2], [1, 2, 2, 2, 0], [2, 0, 0, 0, 1], [2, 0, 0, 1, 0], [2, 0, 0, 1, 1], [2, 0, 1, 0, 0], [2, 0, 1, 0, 1], [2, 0, 1, 1, 2], [2, 0, 1, 2, 1], [2, 0, 1, 2, 2], [2, 0, 2, 1, 2], [2, 0, 2, 2, 1], [2, 1, 0, 0, 0], [2, 1, 0, 1, 0], [2, 1, 0, 2, 1], [2, 1, 0, 2, 2], [2, 1, 1, 0, 0], [2, 1, 1, 0, 2], [2, 1, 2, 0, 1], [2, 1, 2, 0, 2], [2, 1, 2, 1, 0], [2, 1, 2, 2, 0], [2, 2, 0, 1, 1], [2, 2, 0, 1, 2], [2, 2, 0, 2, 1], [2, 2, 1, 0, 2], [2, 2, 1, 1, 0], [2, 2, 1, 2, 0], [2, 2, 2, 0, 1], [2, 2, 2, 1, 0]]
""
[[0, 0, 1, 3, 3], [0, 0, 2, 3, 3], [0, 0, 3, 3, 1], [0, 0, 3, 3, 2], [0, 1, 1, 1, 3], [0, 1, 1, 3, 1], [0, 1, 1, 3, 2], [0, 1, 2, 1, 3], [0, 1, 3, 0, 3], [0, 1, 3, 1, 1], [0, 1, 3, 2, 2], [0, 1, 3, 3, 0], [0, 2, 1, 2, 3], [0, 2, 2, 2, 3], [0, 2, 2, 3, 1], [0, 2, 2, 3, 2], [0, 2, 3, 0, 3], [0, 2, 3, 1, 1], [0, 2, 3, 2, 2], [0, 2, 3, 3, 0], [0, 3, 0, 1, 3], [0, 3, 0, 2, 3], [0, 3, 0, 3, 1], [0, 3, 0, 3, 2], [0, 3, 1, 0, 3], [0, 3, 1, 1, 1], [0, 3, 1, 2, 1], [0, 3, 2, 0, 3], [0, 3, 2, 1, 2], [0, 3, 2, 2, 2], [0, 3, 3, 1, 0], [0, 3, 3, 2, 0], [1, 0, 0, 3, 3], [1, 0, 1, 1, 3], [1, 0, 1, 3, 1], [1, 0, 2, 2, 3], [1, 0, 2, 3, 1], [1, 0, 3, 0, 3], [1, 0, 3, 1, 1], [1, 0, 3, 1, 2], [1, 1, 0, 1, 3], [1, 1, 0, 2, 3], [1, 1, 0, 3, 1], [1, 1, 1, 0, 3], [1, 1, 1, 3, 0], [1, 1, 3, 0, 1], [1, 1, 3, 1, 0], [1, 1, 3, 2, 0], [1, 2, 0, 3, 2], [1, 2, 1, 0, 3], [1, 2, 1, 3, 0], [1, 2, 3, 0, 2], [1, 3, 0, 1, 1], [1, 3, 0, 1, 2], [1, 3, 0, 3, 0], [1, 3, 1, 0, 1], [1, 3, 1, 1, 0], [1, 3, 2, 0, 1], [1, 3, 2, 2, 0], [1, 3, 3, 0, 0], [2, 0, 0, 3, 3], [2, 0, 1, 1, 3], [2, 0, 1, 3, 2], [2, 0, 2, 2, 3], [2, 0, 2, 3, 2], [2, 0, 3, 0, 3], [2, 0, 3, 2, 1], [2, 0, 3, 2, 2], [2, 1, 0, 3, 1], [2, 1, 2, 0, 3], [2, 1, 2, 3, 0], [2, 1, 3, 0, 1], [2, 2, 0, 1, 3], [2, 2, 0, 2, 3], [2, 2, 0, 3, 2], [2, 2, 2, 0, 3], [2, 2, 2, 3, 0], [2, 2, 3, 0, 2], [2, 2, 3, 1, 0], [2, 2, 3, 2, 0], [2, 3, 0, 2, 1], [2, 3, 0, 2, 2], [2, 3, 0, 3, 0], [2, 3, 1, 0, 2], [2, 3, 1, 1, 0], [2, 3, 2, 0, 2], [2, 3, 2, 2, 0], [2, 3, 3, 0, 0], [3, 0, 0, 1, 3], [3, 0, 0, 2, 3], [3, 0, 1, 1, 1], [3, 0, 1, 2, 1], [3, 0, 1, 3, 0], [3, 0, 2, 1, 2], [3, 0, 2, 2, 2], [3, 0, 2, 3, 0], [3, 0, 3, 0, 1], [3, 0, 3, 0, 2], [3, 0, 3, 1, 0], [3, 0, 3, 2, 0], [3, 1, 0, 0, 3], [3, 1, 0, 1, 1], [3, 1, 0, 2, 2], [3, 1, 0, 3, 0], [3, 1, 1, 0, 1], [3, 1, 1, 0, 2], [3, 1, 1, 1, 0], [3, 1, 2, 1, 0], [3, 2, 0, 0, 3], [3, 2, 0, 1, 1], [3, 2, 0, 2, 2], [3, 2, 0, 3, 0], [3, 2, 1, 2, 0], [3, 2, 2, 0, 1], [3, 2, 2, 0, 2], [3, 2, 2, 2, 0], [3, 3, 0, 0, 1], [3, 3, 0, 0, 2], [3, 3, 1, 0, 0], [3, 3, 2, 0, 0]]
""
[[0, 0, 1, 2, 3, 0, 3], [0, 0, 1, 3, 2, 0, 3], [0, 0, 1, 3, 3, 0, 2], [0, 0, 2, 0, 3, 3, 1], [0, 0, 2, 3, 3, 1, 3], [0, 0, 3, 0, 2, 3, 1], [0, 0, 3, 0, 3, 2, 1], [0, 0, 3, 1, 3, 3, 2], [0, 1, 2, 3, 0, 3, 0], [0, 1, 2, 3, 3, 0, 3], [0, 1, 3, 0, 3, 3, 2], [0, 1, 3, 2, 0, 3, 0], [0, 1, 3, 3, 0, 2, 0], [0, 2, 0, 0, 1, 3, 3], [0, 2, 0, 3, 3, 1, 0], [0, 2, 3, 1, 0, 0, 3], [0, 2, 3, 3, 0, 3, 1], [0, 2, 3, 3, 1, 3, 0], [0, 3, 0, 0, 1, 2, 3], [0, 3, 0, 0, 1, 3, 2], [0, 3, 0, 1, 2, 3, 3], [0, 3, 0, 2, 3, 1, 0], [0, 3, 0, 3, 2, 1, 0], [0, 3, 0, 3, 3, 2, 1], [0, 3, 1, 0, 2, 3, 3], [0, 3, 1, 3, 3, 2, 0], [0, 3, 2, 1, 0, 0, 3], [0, 3, 3, 1, 0, 0, 2], [0, 3, 3, 2, 0, 1, 3], [0, 3, 3, 2, 1, 0, 3], [1, 0, 0, 2, 0, 3, 3], [1, 0, 0, 3, 0, 2, 3], [1, 0, 0, 3, 0, 3, 2], [1, 0, 2, 3, 3, 0, 3], [1, 0, 3, 0, 3, 3, 2], [1, 2, 3, 0, 3, 0, 0], [1, 2, 3, 3, 0, 3, 0], [1, 3, 0, 0, 2, 3, 3], [1, 3, 0, 3, 3, 2, 0], [1, 3, 2, 0, 3, 0, 0], [1, 3, 3, 0, 2, 0, 0], [1, 3, 3, 2, 0, 0, 3], [2, 0, 0, 1, 3, 3, 0], [2, 0, 0, 3, 1, 3, 3], [2, 0, 1, 3, 0, 3, 3], [2, 0, 3, 0, 0, 1, 3], [2, 0, 3, 3, 1, 0, 0], [2, 1, 0, 0, 3, 0, 3], [2, 1, 0, 3, 0, 3, 3], [2, 3, 0, 3, 0, 0, 1], [2, 3, 1, 0, 0, 3, 0], [2, 3, 3, 0, 3, 0, 1], [2, 3, 3, 0, 3, 1, 0], [2, 3, 3, 1, 3, 0, 0], [3, 0, 0, 1, 2, 3, 0], [3, 0, 0, 1, 3, 2, 0], [3, 0, 0, 2, 3, 3, 1], [3, 0, 1, 2, 3, 3, 0], [3, 0, 2, 0, 0, 1, 3], [3, 0, 2, 3, 1, 0, 0], [3, 0, 3, 0, 0, 1, 2], [3, 0, 3, 0, 1, 2, 3], [3, 0, 3, 1, 0, 2, 3], [3, 0, 3, 2, 1, 0, 0], [3, 0, 3, 3, 2, 0, 1], [3, 0, 3, 3, 2, 1, 0], [3, 1, 0, 0, 2, 0, 3], [3, 1, 0, 0, 3, 0, 2], [3, 1, 0, 2, 3, 3, 0], [3, 1, 3, 0, 0, 2, 3], [3, 1, 3, 3, 2, 0, 0], [3, 2, 0, 0, 3, 1, 3], [3, 2, 0, 1, 3, 0, 3], [3, 2, 0, 3, 0, 0, 1], [3, 2, 1, 0, 0, 3, 0], [3, 2, 1, 0, 3, 0, 3], [3, 3, 0, 2, 0, 0, 1], [3, 3, 0, 3, 0, 1, 2], [3, 3, 0, 3, 1, 0, 2], [3, 3, 1, 0, 0, 2, 0], [3, 3, 1, 3, 0, 0, 2], [3, 3, 2, 0, 0, 3, 1], [3, 3, 2, 0, 1, 3, 0], [3, 3, 2, 1, 0, 3, 0]]

2017年1月15日日曜日

170115(2)

Ruby


2017の素因数分解がつくる多角形(2)

1種類だけでないことに気がついた。
ただし、凸多角形の判定は行っていない。

# m次以下を取り出す
def mul(f_ary, b_ary, m)
  s1, s2 = f_ary.size, b_ary.size
  ary = Array.new(s1 + s2 - 1, 0)
  (0..s1 - 1).each{|i|
    (0..s2 - 1).each{|j|
      ary[i + j] += f_ary[i] * b_ary[j]
    }
  }
  ary[0..m]
end

def f(k, ary)
  a = Array.new(k, 0)
  (0..ary.size - 1).each{|i|
    a[i % k] += ary[i]
  }
  a
end

def g(ary)
  m = ary.min
  ary.map{|i| i - m}
end

# 最後だけ0か?
def h(ary)
  m = ary.size
  flag = true
  (0..m - 2).each{|i| flag = false if ary[i] == 0}
  flag = false if ary[m - 1] != 0
  flag
end

# 共役か?
def v(ary1, ary2)
  m = ary2[0] - ary1[0]
  ary2 = ary2.map{|i| i - m}
  ary1 == [ary2[0]] + ary2[1..-1].reverse
end

def w(ary)
  m = ary.size
  a = []
  (1..m - 1).each{|i|
    b = Array.new(m, 0)
    (0..m - 1).each{|j|
      b[i * j % m] += ary[j]
    }
    a << b
  }
  a
end

def x(k, w, n)
  (0..k - 1).each{|i|
    ary = []
    (1..k - 1).each{|j|
      ary << w[j - 1].rotate(i * j)
    }
    k0 = (k - 1) / 2
    ary.combination(k0){|c|
      b = c[0]
      (1..k0 - 1).each{|j|
        b = f(k, mul(b, c[j], n))
      }
      b2 = g(f(k, mul(b, b, n)))
      a = ary - c
      d = a[0]
      (1..k0 - 1).each{|j|
        d = f(k, mul(d, a[j], n))
      }
      gb = g(b)
      gd = g(d)
      p [k, i, b2, g(f(k, mul(gb, gd, n)))] if h(b2) && v(gb, gd)
    }
  }
end

n = 100
x(3, w([2, -1, 0]), n)
p ''
x(5, w([2, 1, 0, 0, 0]), n)
p ''
x(5, w([2, -1, 0, 0, 0]), n)
p ''
x(7, w([0, 1, 2, 3, 0, 3, 0]), n)

出力結果
[3, 0, [8, 5, 0], [7, 0, 0]]
[3, 1, [5, 8, 0], [7, 0, 0]]
""
[5, 0, [12, 9, 12, 8, 0], [11, 0, 0, 0, 0]]
[5, 1, [9, 8, 12, 12, 0], [11, 0, 0, 0, 0]]
[5, 2, [12, 12, 8, 9, 0], [11, 0, 0, 0, 0]]
[5, 3, [8, 12, 9, 12, 0], [11, 0, 0, 0, 0]]
""
[5, 0, [27, 15, 31, 3, 0], [31, 0, 0, 0, 0]]
[5, 2, [3, 31, 15, 27, 0], [31, 0, 0, 0, 0]]
[5, 3, [31, 27, 3, 15, 0], [31, 0, 0, 0, 0]]
[5, 4, [15, 3, 27, 31, 0], [31, 0, 0, 0, 0]]
""
[7, 0, [636, 1716, 1664, 1740, 1065, 2196, 0], [2017, 0, 0, 0, 0, 0, 0]]
[7, 2, [2196, 1065, 1740, 1664, 1716, 636, 0], [2017, 0, 0, 0, 0, 0, 0]]
[7, 3, [1065, 1664, 636, 2196, 1740, 1716, 0], [2017, 0, 0, 0, 0, 0, 0]]
[7, 4, [1740, 636, 1065, 1716, 2196, 1664, 0], [2017, 0, 0, 0, 0, 0, 0]]
[7, 5, [1664, 2196, 1716, 1065, 636, 1740, 0], [2017, 0, 0, 0, 0, 0, 0]]
[7, 6, [1716, 1740, 2196, 636, 1664, 1065, 0], [2017, 0, 0, 0, 0, 0, 0]]

170115

Ruby


2017の素因数分解がつくる多角形(1)

tsujimotter さんの記事(http://tsujimotter.hatenablog.com/entry/2017)を見て、
Ruby で確認しようと思った。

確認すること

ζ = e^{2iπ / 7} とする。
2017
= (3ζ + 3ζ^3 + 2ζ^4 + ζ^5) * (2ζ + 3ζ^3 + 3ζ^4 + ζ^5) * (1 + 3ζ + 2ζ^2 + 3ζ^4)
 * (ζ^2 + 2ζ^3 + 3ζ^4 + 3ζ^6) * (ζ^2 + 3ζ^3 + 3ζ^4 + 2ζ^6) * (1 + 3ζ^3 + 2ζ^5 + 3ζ^6)
((3ζ + 3ζ^3 + 2ζ^4 + ζ^5) * (2ζ + 3ζ^3 + 3ζ^4 + ζ^5) * (1 + 3ζ + 2ζ^2 + 3ζ^4))^2
= 2196 + 1065ζ + 1740ζ^2 + 1664ζ^3 + 1716ζ^4 + 636ζ^5

# m次以下を取り出す
def mul(f_ary, b_ary, m)
  s1, s2 = f_ary.size, b_ary.size
  ary = Array.new(s1 + s2 - 1, 0)
  (0..s1 - 1).each{|i|
    (0..s2 - 1).each{|j|
      ary[i + j] += f_ary[i] * b_ary[j]
    }
  }
  ary[0..m]
end

# ζ^7 = 1
def f(ary)
  a = Array.new(7, 0)
  (0..ary.size - 1).each{|i|
    a[i % 7] += ary[i]
  }
  a
end

# ζ^6 + ζ^5 + … + 1 = 0
def g(ary)
  m = ary.min
  ary.map{|i| i - m}
end

n = 100
a1 = [0, 3, 0, 3, 2, 1, 0]
a2 = [0, 2, 0, 3, 3, 1, 0]
a3 = [1, 3, 2, 0, 3, 0, 0]
ary = f(mul(a1, a2, n))
ary = f(mul(ary, a3, n))
b = ary
ary = f(mul(ary, [ary[0]] + (ary[1..-1]).reverse, n))

p ary
p g(ary)
p b
p c = f(mul(b, b, n))
p g(c)

出力結果
[77649, 75632, 75632, 75632, 75632, 75632, 75632]
[2017, 0, 0, 0, 0, 0, 0]
[86, 130, 116, 100, 85, 96, 116]
[76828, 75697, 76372, 76296, 76348, 75268, 74632]
[2196, 1065, 1740, 1664, 1716, 636, 0]

2017年1月14日土曜日

170114

新たな整数列(21)

https://oeis.org/A280841
https://oeis.org/A280842
が追加されました。