2022年7月8日金曜日

220708

Ruby


素数を生成する漸化式(1)

2008年Eric Rowlandにより、以下の数列は1または素数しか現れないことが証明されている。

def A106108(n)
  ary = [7]
  (2..n).each{|i| ary << ary[-1] + i.gcd(ary[-1])}
  ary
end

def A132199(n)
  ary = A106108(n + 1)
  (1..n).map{|i| ary[i] - ary[i - 1]}
end

n = 100
p A132199(n)

出力結果
[1, 1, 1, 5, 3, 1, 1, 1, 1, 11, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 47, 3, 1, 5, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 101]

2022年6月25日土曜日

220625

PARI


A355133等

似た数列を出力してみた。

M=10;

a355133(n) = if(n==0, 1, sum(k=1, n,            k*2^k    *stirling(n, k, 1)*a355133(k-1)));
for(n=0, M, print1(a355133(n), ", "))
b355208(n) = if(n==0, 1, sum(k=1, n,              2^k    *stirling(n, k, 1)*b355208(k-1)));
a355208(n) = b355208(n-1);
for(n=1, M, print1(a355208(n), ", "))

a355134(n) = if(n==0, 1, sum(k=1, n, (-1)^(n-k)*k*2^k    *stirling(n, k, 1)*a355134(k-1)));
for(n=0, M, print1(a355134(n), ", "))
b355209(n) = if(n==0, 1, sum(k=1, n, (-1)^(n-k)  *2^k    *stirling(n, k, 1)*b355209(k-1)));
a355209(n) = b355209(n-1);
for(n=1, M, print1(a355209(n), ", "))

a355131(n) = if(n==0, 1, sum(k=1, n,            k*2^k    *stirling(n, k, 2)*a355131(k-1)));
for(n=0, M, print1(a355131(n), ", "))
b355210(n) = if(n==0, 1, sum(k=1, n,              2^k    *stirling(n, k, 2)*b355210(k-1)));
a355210(n) = b355210(n-1);
for(n=1, M, print1(a355210(n), ", "))

a355132(n) = if(n==0, 1, sum(k=1, n, (-1)^(n-k)*k*2^k    *stirling(n, k, 2)*a355132(k-1)));
for(n=0, M, print1(a355132(n), ", "))
b355211(n) = if(n==0, 1, sum(k=1, n, (-1)^(n-k)  *2^k    *stirling(n, k, 2)*b355211(k-1)));
a355211(n) = b355211(n-1);
for(n=1, M, print1(a355211(n), ", "))

a355120(n) = if(n==0, 1, sum(k=1, n,            k*2^(k-1)*stirling(n, k, 1)*a355120(k-1)));
for(n=0, M, print1(a355120(n), ", "))
b355214(n) = if(n==0, 1, sum(k=1, n,              2^(k-1)*stirling(n, k, 1)*b355214(k-1)));
a355214(n) = b355214(n-1);
for(n=1, M, print1(a355214(n), ", "))

a355121(n) = if(n==0, 1, sum(k=1, n, (-1)^(n-k)*k*2^(k-1)*stirling(n, k, 1)*a355121(k-1)));
for(n=0, M, print1(a355121(n), ", "))
b355215(n) = if(n==0, 1, sum(k=1, n, (-1)^(n-k)  *2^(k-1)*stirling(n, k, 1)*b355215(k-1)));
a355215(n) = b355215(n-1);
for(n=1, M, print1(a355215(n), ", "))

a355122(n) = if(n==0, 1, sum(k=1, n,            k*2^(k-1)*stirling(n, k, 2)*a355122(k-1)));
for(n=0, M, print1(a355122(n), ", "))
b355216(n) = if(n==0, 1, sum(k=1, n,              2^(k-1)*stirling(n, k, 2)*b355216(k-1)));
a355216(n) = b355216(n-1);
for(n=1, M, print1(a355216(n), ", "))

a355123(n) = if(n==0, 1, sum(k=1, n, (-1)^(n-k)*k*2^(k-1)*stirling(n, k, 2)*a355123(k-1)));
for(n=0, M, print1(a355123(n), ", "))
b355217(n) = if(n==0, 1, sum(k=1, n, (-1)^(n-k)  *2^(k-1)*stirling(n, k, 2)*b355217(k-1)));
a355217(n) = b355217(n-1);
for(n=1, M, print1(a355217(n), ", "))

出力結果
1, 2, 14, 292, 16836, 2517888, 927979616, 811623678304, 1639230314891936, 7494183556478948928, 76401967141928846136512, 
1, 2, 6, 28, 236, 4400, 197552, 20430656, 4600591488, 2179887358272, 
1, 2, 18, 484, 33756, 5726688, 2282797376, 2092535127520, 4343501656698208, 20170260943214036928, 207447888426953360929472, 
1, 2, 10, 108, 2308, 94384, 7315728, 1077605632, 304189296192, 166216599473344, 
1, 2, 18, 482, 33554, 5688162, 2266828306, 2077710037986, 4312607047919378, 20026622857699101794, 205970083615742633015314, 
1, 2, 10, 106, 2234, 90570, 6986490, 1026623306, 289475035770, 158101579596106, 
1, 2, 14, 290, 16654, 2487202, 916292622, 801308046114, 1618342215277838, 7398618880762147490, 75427503900622910066190, 
1, 2, 6, 26, 182, 2746, 111350, 11245882, 2521162358, 1193350247226, 
1, 1, 3, 26, 654, 45084, 7934924, 3381663872, 3365978050576, 7632454575648720, 38732162420625498608, 
1, 1, 1, 0, -8, -64, -600, -14104, -1170120, -248815984, 
1, 1, 5, 74, 2778, 248244, 51212444, 23984832416, 25218677193200, 59000757443457072, 304720138059811544048, 
1, 1, 3, 20, 260, 6304, 281096, 23095768, 3534364152, 1022066008944, 
1, 1, 5, 73, 2725, 242921, 50068197, 23441365641, 24644653272869, 57655911504114985, 297771560486880287589, 
1, 1, 3, 19, 239, 5675, 249983, 20404811, 3112376543, 898693573515, 
1, 1, 3, 25, 611, 41721, 7326115, 3120454233, 3105527125475, 7041597540281017, 35733375744777784867, 
1, 1, 1, -1, -19, -153, -1155, -9785, -183075, -25013497, 

2022年5月7日土曜日

220507

Ruby


和と差の積を用いた素因数分解

nを素因数分解しようとすれば、√n 以下の素数を順番に割る方法もあるが、
受験数学では、和と差の積を用いた方法を使う方が速い場合が多い。

ここでは、後者の方法を実装してみた。
(ただし、偶数の場合は、2で割り続ければ、奇数になるので、
奇数の場合の素因数分解について考える。)

def is_square(n)
  n == Math.sqrt(n).to_i ** 2
end

def A(n)
  a = Math.sqrt(n).ceil
  while !is_square(a * a - n)
    a += 1 
  end
  b = Math.sqrt(a * a - n).to_i
  c, d = a - b, a + b
  return [A(c), A(d)] if c > 1
  [d]
end

n = 200
3.step(2 * n - 1, 2){|i| p [i, A(i)]}

出力結果
[3, [3]]
[5, [5]]
[7, [7]]
[9, [[3], [3]]]
[11, [11]]
[13, [13]]
[15, [[3], [5]]]
[17, [17]]
[19, [19]]
[21, [[3], [7]]]
[23, [23]]
[25, [[5], [5]]]
[27, [[3], [[3], [3]]]]
[29, [29]]
[31, [31]]
[33, [[3], [11]]]
[35, [[5], [7]]]
[37, [37]]
[39, [[3], [13]]]
[41, [41]]
[43, [43]]
[45, [[5], [[3], [3]]]]
[47, [47]]
[49, [[7], [7]]]
[51, [[3], [17]]]
[53, [53]]
[55, [[5], [11]]]
[57, [[3], [19]]]
[59, [59]]
[61, [61]]
[63, [[7], [[3], [3]]]]
[65, [[5], [13]]]
[67, [67]]
[69, [[3], [23]]]
[71, [71]]
[73, [73]]
[75, [[5], [[3], [5]]]]
[77, [[7], [11]]]
[79, [79]]
[81, [[[3], [3]], [[3], [3]]]]
[83, [83]]
[85, [[5], [17]]]
[87, [[3], [29]]]
[89, [89]]
[91, [[7], [13]]]
[93, [[3], [31]]]
[95, [[5], [19]]]
[97, [97]]
[99, [[[3], [3]], [11]]]
[101, [101]]
[103, [103]]
[105, [[7], [[3], [5]]]]
[107, [107]]
[109, [109]]
[111, [[3], [37]]]
[113, [113]]
[115, [[5], [23]]]
[117, [[[3], [3]], [13]]]
[119, [[7], [17]]]
[121, [[11], [11]]]
[123, [[3], [41]]]
[125, [[5], [[5], [5]]]]
[127, [127]]
[129, [[3], [43]]]
[131, [131]]
[133, [[7], [19]]]
[135, [[[3], [3]], [[3], [5]]]]
[137, [137]]
[139, [139]]
[141, [[3], [47]]]
[143, [[11], [13]]]
[145, [[5], [29]]]
[147, [[7], [[3], [7]]]]
[149, [149]]
[151, [151]]
[153, [[[3], [3]], [17]]]
[155, [[5], [31]]]
[157, [157]]
[159, [[3], [53]]]
[161, [[7], [23]]]
[163, [163]]
[165, [[11], [[3], [5]]]]
[167, [167]]
[169, [[13], [13]]]
[171, [[[3], [3]], [19]]]
[173, [173]]
[175, [[7], [[5], [5]]]]
[177, [[3], [59]]]
[179, [179]]
[181, [181]]
[183, [[3], [61]]]
[185, [[5], [37]]]
[187, [[11], [17]]]
[189, [[[3], [3]], [[3], [7]]]]
[191, [191]]
[193, [193]]
[195, [[13], [[3], [5]]]]
[197, [197]]
[199, [199]]
[201, [[3], [67]]]
[203, [[7], [29]]]
[205, [[5], [41]]]
[207, [[[3], [3]], [23]]]
[209, [[11], [19]]]
[211, [211]]
[213, [[3], [71]]]
[215, [[5], [43]]]
[217, [[7], [31]]]
[219, [[3], [73]]]
[221, [[13], [17]]]
[223, [223]]
[225, [[[3], [5]], [[3], [5]]]]
[227, [227]]
[229, [229]]
[231, [[11], [[3], [7]]]]
[233, [233]]
[235, [[5], [47]]]
[237, [[3], [79]]]
[239, [239]]
[241, [241]]
[243, [[[3], [3]], [[3], [[3], [3]]]]]
[245, [[7], [[5], [7]]]]
[247, [[13], [19]]]
[249, [[3], [83]]]
[251, [251]]
[253, [[11], [23]]]
[255, [[[3], [5]], [17]]]
[257, [257]]
[259, [[7], [37]]]
[261, [[[3], [3]], [29]]]
[263, [263]]
[265, [[5], [53]]]
[267, [[3], [89]]]
[269, [269]]
[271, [271]]
[273, [[13], [[3], [7]]]]
[275, [[11], [[5], [5]]]]
[277, [277]]
[279, [[[3], [3]], [31]]]
[281, [281]]
[283, [283]]
[285, [[[3], [5]], [19]]]
[287, [[7], [41]]]
[289, [[17], [17]]]
[291, [[3], [97]]]
[293, [293]]
[295, [[5], [59]]]
[297, [[11], [[3], [[3], [3]]]]]
[299, [[13], [23]]]
[301, [[7], [43]]]
[303, [[3], [101]]]
[305, [[5], [61]]]
[307, [307]]
[309, [[3], [103]]]
[311, [311]]
[313, [313]]
[315, [[[3], [5]], [[3], [7]]]]
[317, [317]]
[319, [[11], [29]]]
[321, [[3], [107]]]
[323, [[17], [19]]]
[325, [[13], [[5], [5]]]]
[327, [[3], [109]]]
[329, [[7], [47]]]
[331, [331]]
[333, [[[3], [3]], [37]]]
[335, [[5], [67]]]
[337, [337]]
[339, [[3], [113]]]
[341, [[11], [31]]]
[343, [[7], [[7], [7]]]]
[345, [[[3], [5]], [23]]]
[347, [347]]
[349, [349]]
[351, [[13], [[3], [[3], [3]]]]]
[353, [353]]
[355, [[5], [71]]]
[357, [[17], [[3], [7]]]]
[359, [359]]
[361, [[19], [19]]]
[363, [[11], [[3], [11]]]]
[365, [[5], [73]]]
[367, [367]]
[369, [[[3], [3]], [41]]]
[371, [[7], [53]]]
[373, [373]]
[375, [[[3], [5]], [[5], [5]]]]
[377, [[13], [29]]]
[379, [379]]
[381, [[3], [127]]]
[383, [383]]
[385, [[11], [[5], [7]]]]
[387, [[[3], [3]], [43]]]
[389, [389]]
[391, [[17], [23]]]
[393, [[3], [131]]]
[395, [[5], [79]]]
[397, [397]]
[399, [[19], [[3], [7]]]]

2022年4月24日日曜日

220424

Ruby


A064617のEXAMPLEの一般化

一般化してみた。

def A(k, n)
  (1..n).to_a.join.to_i(k)
end

def B(k, n)
  (k - n..k - 1).to_a.reverse.join.to_i(k)
end

(2..10).each{|i| 
  (1..i - 1).each{|j|
    a = A(i, j)
    b = B(i, j)
    puts "#{b} = #{a} * #{i - 2} + #{b - a * (i - 2)}"
  }
  p ""
}

出力結果
1 = 1 * 0 + 1
""
2 = 1 * 1 + 1
7 = 5 * 1 + 2
""
3 = 1 * 2 + 1
14 = 6 * 2 + 2
57 = 27 * 2 + 3
""
4 = 1 * 3 + 1
23 = 7 * 3 + 2
117 = 38 * 3 + 3
586 = 194 * 3 + 4
""
5 = 1 * 4 + 1
34 = 8 * 4 + 2
207 = 51 * 4 + 3
1244 = 310 * 4 + 4
7465 = 1865 * 4 + 5
""
6 = 1 * 5 + 1
47 = 9 * 5 + 2
333 = 66 * 5 + 3
2334 = 466 * 5 + 4
16340 = 3267 * 5 + 5
114381 = 22875 * 5 + 6
""
7 = 1 * 6 + 1
62 = 10 * 6 + 2
501 = 83 * 6 + 3
4012 = 668 * 6 + 4
32099 = 5349 * 6 + 5
256794 = 42798 * 6 + 6
2054353 = 342391 * 6 + 7
""
8 = 1 * 7 + 1
79 = 11 * 7 + 2
717 = 102 * 7 + 3
6458 = 922 * 7 + 4
58126 = 8303 * 7 + 5
523137 = 74733 * 7 + 6
4708235 = 672604 * 7 + 7
42374116 = 6053444 * 7 + 8
""
9 = 1 * 8 + 1
98 = 12 * 8 + 2
987 = 123 * 8 + 3
9876 = 1234 * 8 + 4
98765 = 12345 * 8 + 5
987654 = 123456 * 8 + 6
9876543 = 1234567 * 8 + 7
98765432 = 12345678 * 8 + 8
987654321 = 123456789 * 8 + 9
""

2022年3月13日日曜日

220313

Ruby


Expansion of e.g.f. 1/(1 - f(x)).

この形のe.g.f. を2通りで求めてみた。

def f(n)
  return 1 if n < 2
  (1..n).inject(:*)
end

def ncr(n, r)
  return 1 if r == 0
  (n - r + 1..n).inject(:*) / (1..r).inject(:*)
end

def gf_to_egf(ary)
  (0..ary.size - 1).map{|i| f(i) * ary[i]}
end

def I(ary, n)
  a = [1]
  (0..n - 1).each{|i| a << -(0..i).inject(0){|s, j| s + ary[1 + i - j] * a[j]}}
  a
end

def I_egf(ary, n)
  a = [1]
  (1..n).each{|i| a << -(1..i).inject(0){|s, j| s + ncr(i, j) * ary[j] * a[-j]}}
  a
end

# ary[0] = 0として扱われる
def A_1(ary, n)
  a = [1] + (1..n).map{|i| -ary[i]}
  gf_to_egf(I(a, n))
end

# a[0] = 0として扱われる
def A_2(ary, n)
  a = gf_to_egf(ary)
  b = [1] + (1..n).map{|i| -a[i]}
  I_egf(b, n) 
end

def A000670_1(n)
  ary = (0..n).map{|i| 1r / f(i)}
  A_1(ary, n).map(&:to_i)
end

def A000670_2(n)
  ary = (0..n).map{|i| 1r / f(i)}
  A_2(ary, n).map(&:to_i)
end

def A006153_1(n)
  ary = [0] + (0..n).map{|i| 1r / f(i)}
  A_1(ary, n).map(&:to_i)
end

def A006153_2(n)
  ary = [0] + (0..n).map{|i| 1r / f(i)}
  A_2(ary, n).map(&:to_i)
end

n = 10
p A000670_1(n)
p A000670_2(n)
p A006153_1(n)
p A006153_2(n)

出力結果
[1, 1, 3, 13, 75, 541, 4683, 47293, 545835, 7087261, 102247563]
[1, 1, 3, 13, 75, 541, 4683, 47293, 545835, 7087261, 102247563]
[1, 1, 4, 21, 148, 1305, 13806, 170401, 2403640, 38143377, 672552730]
[1, 1, 4, 21, 148, 1305, 13806, 170401, 2403640, 38143377, 672552730]

2022年2月11日金曜日

220211

Ruby


A010754とA010755

計算してみた。

def ncr(n, r)
  return 1 if r == 0
  (n - r + 1..n).inject(:*) / (1..r).inject(:*)
end

def A(n)
  (0..n).map{|i| (0..i / 2).map{|j| ncr(i - j, j)}.inject(:+)}
end

def A010754(n)
  (0..n).map{|i| (0..i / 2 / 2).map{|j| ncr(i - j, j)}.inject(:+)}
end

def A010755(n)
  (0..n).map{|i| (0..(i / 2 - 1) / 2).map{|j| ncr(i - j, j)}.inject(:+).to_i}
end

n = 50
p A(n)
p A010754(n)
p A010755(n)

出力結果
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309, 3524578, 5702887, 9227465, 14930352, 24157817, 39088169, 63245986, 102334155, 165580141, 267914296, 433494437, 701408733, 1134903170, 1836311903, 2971215073, 4807526976, 7778742049, 12586269025, 20365011074]
[1, 1, 1, 1, 4, 5, 6, 7, 23, 30, 38, 47, 141, 188, 245, 313, 888, 1201, 1594, 2080, 5676, 7756, 10429, 13817, 36622, 50439, 68497, 91804, 237821, 329625, 451166, 610247, 1551727, 2161974, 2978230, 4058629, 10161409, 14220038, 19694622, 27007760, 66732392, 93740152, 130427529, 179815516, 439267525, 619083041, 864813846, 1197799127, 2897064773, 4094863900, 5740250973]
[0, 0, 1, 1, 1, 1, 6, 7, 8, 9, 38, 47, 57, 68, 245, 313, 393, 486, 1594, 2080, 2673, 3388, 10429, 13817, 18058, 23307, 68497, 91804, 121541, 159081, 451166, 610247, 816256, 1080399, 2978230, 4058629, 5474584, 7313138, 19694622, 27007760, 36687377, 49387987, 130427529, 179815516, 245730805, 332985281, 864813846, 1197799127, 1645387073, 2242380904, 5740250973]

2022年1月18日火曜日

220118

PARI


分割における最小の数と分割の数に関する数列

次のような美しい式が成り立つ。

N=40; x='x+O('x^N);

f_x = sum(k=0, N, x^(k*(k+1)/2)  /prod(j=1, k, 1-x^j));
f_y = sum(k=0, N, x^(k*(3*k-1)/2)/prod(j=1, k, 1-x^j));
f_z = sum(k=0, N, x^(k*(3*k+1)/2)/prod(j=1, k, 1-x^j));

g_x = sum(k=0, N, x^k            /prod(j=1, k, 1-x^j));
g_y = sum(k=0, N, x^k^2          /prod(j=1, k, 1-x^j));
g_z = sum(k=0, N, x^(k*(k+1))    /prod(j=1, k, 1-x^j));

print(Vec(f_x))       \\ A000009
print(Vec(f_y))       \\ A025157
print(Vec(f_z))       \\ A237979
print(Vec(f_y - f_z)) \\ A096401
print(Vec(f_x - f_y)) \\ A237976
print(Vec(f_x - f_z)) \\ A237977

print(Vec(g_x))       \\ A000041
print(Vec(g_y))       \\ A003114
print(Vec(g_z))       \\ A003106
print(Vec(g_y - g_z)) \\ A006141
print(Vec(g_x - g_y)) \\ A039899
print(Vec(g_x - g_z)) \\ A039900

出力結果
[1, 1, 1, 2, 2, 3, 4, 5, 6, 8, 10, 12, 15, 18, 22, 27, 32, 38, 46, 54, 64, 76, 89, 104, 122, 142, 165, 192, 222, 256, 296, 340, 390, 448, 512, 585, 668, 760, 864, 982]
[1, 1, 1, 1, 1, 2, 2, 3, 3, 4, 4, 5, 6, 7, 8, 10, 11, 13, 15, 17, 19, 22, 25, 28, 32, 36, 41, 46, 52, 58, 66, 73, 82, 91, 102, 113, 126, 139, 155, 171]
[1, 0, 1, 1, 1, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 7, 7, 9, 10, 12, 13, 16, 17, 20, 22, 25, 28, 32, 35, 40, 45, 50, 56, 63, 70, 78, 87, 96, 107, 118, 131]
[1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 8, 8, 10, 11, 13, 14, 17, 18, 21, 23, 26, 28, 32, 35, 39, 43, 48, 53]
[1, 1, 1, 2, 2, 3, 4, 6, 7, 9, 11, 14, 17, 21, 25, 31, 37, 45, 54, 64, 76, 90, 106, 124, 146, 170, 198, 230, 267, 308, 357, 410, 472, 542, 621, 709, 811]
[1, 0, 1, 1, 2, 3, 3, 4, 5, 7, 8, 11, 13, 17, 20, 25, 29, 36, 42, 51, 60, 72, 84, 100, 117, 137, 160, 187, 216, 251, 290, 334, 385, 442, 507, 581, 664, 757, 864]
[1, 1, 2, 3, 5, 7, 11, 15, 22, 30, 42, 56, 77, 101, 135, 176, 231, 297, 385, 490, 627, 792, 1002, 1255, 1575, 1958, 2436, 3010, 3718, 4565, 5604, 6842, 8349, 10143, 12310, 14883, 17977, 21637, 26015, 31185]
[1, 1, 1, 1, 2, 2, 3, 3, 4, 5, 6, 7, 9, 10, 12, 14, 17, 19, 23, 26, 31, 35, 41, 46, 54, 61, 70, 79, 91, 102, 117, 131, 149, 167, 189, 211, 239, 266, 299, 333]
[1, 0, 1, 1, 1, 1, 2, 2, 3, 3, 4, 4, 6, 6, 8, 9, 11, 12, 15, 16, 20, 22, 26, 29, 35, 38, 45, 50, 58, 64, 75, 82, 95, 105, 120, 133, 152, 167, 190, 210, 237]
[1, 0, 0, 1, 1, 1, 1, 1, 2, 2, 3, 3, 4, 4, 5, 6, 7, 8, 10, 11, 13, 15, 17, 19, 23, 25, 29, 33, 38, 42, 49, 54, 62, 69, 78, 87, 99, 109, 123]
[1, 2, 3, 5, 8, 12, 18, 25, 36, 49, 68, 91, 123, 162, 214, 278, 362, 464, 596, 757, 961, 1209, 1521, 1897, 2366, 2931, 3627, 4463, 5487, 6711, 8200, 9976, 12121, 14672, 17738, 21371, 25716, 30852]
[1, 1, 2, 4, 6, 9, 13, 19, 27, 38, 52, 71, 95, 127, 167, 220, 285, 370, 474, 607, 770, 976, 1226, 1540, 1920, 2391, 2960, 3660, 4501, 5529, 6760, 8254, 10038, 12190, 14750, 17825, 21470, 25825, 30975]

2021年12月13日月曜日

211213

Ruby


ナゴヤ三角形について(3)

一つの角が90度の、全ての辺の長さが整数の三角形について考えます。
このうち、辺の長さが互いに素な場合(原始ピタゴラス数)を計算すると以下のようになります。

def A(n)
  ary = []
  (1..n).each{|i|
    (i + 1..n).each{|j|
      if i.gcd(j) == 1 && (i - j) % 2 > 0
        x, y, z = j * j, i * j, i * i
        b = y + y
        c = x + z 
        a = x - z
        ary << [a, b, c]
      end
    }
  }
  ary
end

n = 10
A(n).sort.each{|i| p i}

出力結果
[3, 4, 5]
[5, 12, 13]
[7, 24, 25]
[9, 40, 41]
[11, 60, 61]
[13, 84, 85]
[15, 8, 17]
[15, 112, 113]
[17, 144, 145]
[19, 180, 181]
[21, 20, 29]
[33, 56, 65]
[35, 12, 37]
[39, 80, 89]
[45, 28, 53]
[51, 140, 149]
[55, 48, 73]
[63, 16, 65]
[65, 72, 97]
[77, 36, 85]
[91, 60, 109]
[99, 20, 101]

2021年12月12日日曜日

211212

Ruby


ナゴヤ三角形について(2)

一つの角が120度の、全ての辺の長さが整数の三角形について考えます。
このうち、辺の長さが互いに素な場合を計算すると以下のようになります。

def A(n)
  ary = []
  (1..n).each{|i|
    (i + 1..n).each{|j|
      if i.gcd(j) == 1 && (i - j) % 3 > 0
        x, y, z = j * j, i * j, i * i
        b = x + y + y
        c = x + y + z 
        a = y + y + z
        ary << [b - a, a, c]
      end
    }
  }
  ary
end

n = 10
A(n).sort.each{|i| p i}

出力結果
[3, 5, 7]
[5, 16, 19]
[7, 33, 37]
[8, 7, 13]
[9, 56, 61]
[11, 85, 91]
[13, 120, 127]
[15, 161, 169]
[16, 39, 49]
[17, 208, 217]
[19, 261, 271]
[24, 11, 31]
[24, 95, 109]
[32, 175, 193]
[35, 13, 43]
[40, 51, 79]
[45, 32, 67]
[55, 57, 97]
[56, 115, 151]
[63, 17, 73]
[65, 88, 133]
[77, 40, 103]
[80, 19, 91]
[91, 69, 139]

2021年12月11日土曜日

211211

Ruby


ナゴヤ三角形について(1)

この記事は
日曜数学 Advent Calendar 2021
の12/11 分として書いております。

ナゴヤ三角形とは、一松 信氏命名の三角形の名称で、
一つの角が60度の、全ての辺の長さが整数の三角形(ただし、正三角形は除く)
のことです。
大学受験数学で頻出のものに、(3, 7, 8)や(5, 7, 8)があります。
辺の長さが互いに素な場合を原始的(primitive)とよびます。

原始的なナゴヤ三角形は、適当な正の整数m, n(0 < n < m)により、
2*m*n+n^2, m^2+m*n+n^2, m^2+2*m*n
もしくは
m^2 - n^2, m^2+m*n+n^2, m^2+2*m*n
のいずれかの形で一通りで表されます。

ここで注意しないといけない事は、
m, nに適当な値を入れると原始的でなくなる
ということです。
(m, n)=1, m-nが3で割り切れない
という条件が必要です。 

これらをもとに、原始的なナゴヤ三角形を計算すると以下のようになります。

def A(n)
  ary = []
  (1..n).each{|i|
    (i + 1..n).each{|j|
      if i.gcd(j) == 1 && (i - j) % 3 > 0
        x, y, z = j * j, i * j, i * i
        b = x + y + y
        c = x + y + z 
        a = y + y + z
        ary << [    a, b, c]
        ary << [b - a, b, c]
      end
    }
  }
  ary
end

n = 10
A(n).sort.each{|i| p i}

出力結果
[3, 8, 7]
[5, 8, 7]
[5, 21, 19]
[7, 15, 13]
[7, 40, 37]
[8, 15, 13]
[9, 65, 61]
[11, 35, 31]
[11, 96, 91]
[13, 48, 43]
[13, 133, 127]
[15, 176, 169]
[16, 21, 19]
[16, 55, 49]
[17, 80, 73]
[17, 225, 217]
[19, 99, 91]
[19, 280, 271]
[24, 35, 31]
[24, 119, 109]
[32, 77, 67]
[32, 207, 193]
[33, 40, 37]
[35, 48, 43]
[39, 55, 49]
[40, 91, 79]
[40, 117, 103]
[45, 77, 67]
[51, 91, 79]
[55, 112, 97]
[56, 65, 61]
[56, 171, 151]
[57, 112, 97]
[63, 80, 73]
[65, 153, 133]
[69, 160, 139]
[77, 117, 103]
[80, 99, 91]
[85, 96, 91]
[88, 153, 133]
[91, 160, 139]
[95, 119, 109]
[115, 171, 151]
[120, 133, 127]
[161, 176, 169]
[175, 207, 193]
[208, 225, 217]
[261, 280, 271]