未知の項
以下において、最も低い精度までで比較されることを確認してみた。
f(n) = my(x='x+O('x^(n+1))); sum(k=0, n, x^k);
print(f(4)==f(8));
print((f(4)+2*x^4)==f(8));
print((f(4)+2*x^6)==f(8));
出力結果
1
0
1
f(n) = my(x='x+O('x^(n+1))); sum(k=0, n, x^k);
print(f(4)==f(8));
print((f(4)+2*x^4)==f(8));
print((f(4)+2*x^6)==f(8));
load(zeilberger)$
/* Zeilberger 出力を自動でシフトして係数リストにする関数 */
shifted_zeilberger_coeffs(F_expr, k, n) := block(
[Z, m],
print("----------------------------------------"),
print("Applying Zeilberger to F =", F_expr),
Z : Zeilberger(F_expr, k, n)[1][2],
m : length(Z) - 1,
map(lambda([c], factor(subst(n = n-m, c))), Z)
)$
F(a) := a^k * binomial(n,k) * binomial(2*n,k)$
/* A005809 */
Z : shifted_zeilberger_coeffs(F(1), k, n)$
print("A005809 coefficients:", Z)$
/* A026000 */
Z : shifted_zeilberger_coeffs(F(2), k, n)$
print("A026000 coefficients:", Z)$
/* A387928 */
Z : shifted_zeilberger_coeffs(F(3), k, n)$
print("A387928 coefficients:", Z)$
----------------------------------------
Applying Zeilberger to F = binomial(n, k) binomial(2 n, k)
A005809 coefficients: [3 (3 n - 2) (3 n - 1), - 2 n (2 n - 1)]
----------------------------------------
k
Applying Zeilberger to F = 2 binomial(n, k) binomial(2 n, k)
A026000 coefficients: [(n - 1) (2 n - 3) (10 n - 3),
3 2
220 n - 506 n + 334 n - 63, - n (2 n - 1) (10 n - 13)]
----------------------------------------
k
Applying Zeilberger to F = 3 binomial(n, k) binomial(2 n, k)
A387928 coefficients: [16 (n - 1) (2 n - 3) (11 n - 3),
3 2
649 n - 1475 n + 964 n - 180, - 2 n (2 n - 1) (11 n - 14)]N=30;
a(n) = if(n==0, 1, sum(k=0, (n-1)\5, a(5*k) * a(n-1-5*k)));
apr(n, p, r) = r*binomial(n*p+r, n)/(n*p+r);
b(n) = apr(n\5, 6, n%5+1);
\\ aとbの値が一致するかどうかを確認
for(n=0, N, if(a(n) != b(n), print(n)));
for(n=0, N, print1(a(n),", "));
K=10;
my_besseli(n, x) = besseli(n, x)*(x/2)^n/n!;
for(k=0, K, print([k, besseli(k, 2*x)]));
print;
for(k=0, K, print([k, my_besseli(k, 2*x)]));
N=10;
K=10;
a(n, k) = binomial((k+1)*n+k-1, n)/(n+1);
b(n, k) = my(x='x+O('x^(n+1))); x*sum(j=0, n, a(j, k)*x^j);
for(k=0, K, f=b(N, k); if(f*(1-f)^k==x, print([k, Vec(f)])));
N=10;
K=10;
a(n, k) = binomial(k*n+1, n)/(k*n+1);
b(n, k) = my(x='x+O('x^(n+1))); sum(j=0, n, a(j, k)*x^j);
for(k=0, K, f=b(N, k); if(f*subst(f, x, -x*f^(2*k-1))==1, print([k, Vec(f)])));
Ruby
An identity motivated by an amazing identity of Ramanujan
# a(n) = 99*a(n-1) - 99*a(n-2) + a(n-3)
def A(n, a, b, c)
ary = [a, b, c]
(3..n).each{|i| ary << 99*ary[-1] - 99*ary[-2] + ary[-3]}
ary
end
n = 10
# A261004
a_ary = A(n, -3, -461, -45343)
# A269548
b_ary = A(n, -1, -233, -22961)
# A269549
c_ary = A(n, 1, -199, -19799)
# A269550
d_ary = A(n, 7, 465, 45347)
# A269551
e_ary = A(n, 5, 237, 22965)
# A269552
f_ary = A(n, 3, 203, 19803)
# A269553
p_ary = A(n, -3, -435, -42763)
# A269554
q_ary = A(n, -1, -343, -33861)
# A269555
r_ary = A(n, 7, 439, 42767)
# A269556
s_ary = A(n, 5, 347, 33865)
# A010701
t_ary = [3] * (n + 1)
a = [
a_ary,
b_ary,
c_ary,
d_ary,
e_ary,
f_ary,
p_ary,
q_ary,
r_ary,
s_ary,
t_ary
]
(0..n).each{|i|
(1..5).each{|j|
ary = (0..10).map{|k| a[k][i]}
terms = ary.each_with_index.map{|x, idx|
display = x < 0 ? "(#{x})^#{j}" : "#{x}^#{j}"
operator = idx == 0 ? "" : (idx < 6 ? " + " : " - ")
operator + display
}
expression = terms.join
# 実際の数値計算
sum = ary.each_with_index.map{|x, idx| idx < 6 ? x ** j : -x ** j}.sum
puts "#{expression} = #{sum}"
}
p ""
}
M=20;
N=10;
b(n, k) = if(n==1, 1, k+n*sum(j=1, n-1, b(j, k)));
a(n, k) = if(n<4, b(n, k), (n+2)*a(n-1, k)-(n-1)*a(n-2, k));
\\ aとbの値が一致するかどうかを確認
for(k=-5, 5, for(n=1, M, if(a(n, k)!=b(n, k), print([n, k]))));
for(k=-5, 5, print1(k,": "); for(n=1, N, print1(a(n, k),", ")); print);
N=10;
K=10;
a(n, k) = binomial(k*n+1, n)/(k*n+1);
b(n, k) = my(x='x+O('x^(n+1))); sum(j=0, n, a(j, k)*x^j);
for(k=0, K, f=b(N, k); if(f==1+x*f^k, print([k, Vec(f)])));
N=10;
a059297(n, k) = my(x='x+O('x^(n+1)), t='t+O('t^(k+1))); n!*polcoef(polcoef(exp(t*x* exp(x)), n), k);
a185951(n, k) = my(x='x+O('x^(n+1)), t='t+O('t^(k+1))); n!*polcoef(polcoef(exp(t*x*cosh(x)), n), k);
a136630(n, k) = my(x='x+O('x^(n+1)), t='t+O('t^(k+1))); n!*polcoef(polcoef(exp(t *sinh(x)), n), k);
for(n=0, N, for(k=0, n, print1(a059297(n, k),", ")); print);
for(n=0, N, for(k=0, n, print1(a185951(n, k),", ")); print);
for(n=0, N, for(k=0, n, print1(a136630(n, k),", ")); print);
def f(n)
return 1 if n == 0
(1..n).inject(:*)
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 stirling(n, k, m = 1)
return [1] + [0] * n if k == 0
if m == 1
ary = [0] + (1..n).map{|i| 1r / i}
else
ary = [0] + (1..n).map{|i| 1r / f(i)}
end
ary = power(ary, k, n)
fk = f(k)
(0..n).map{|i| (ary[i] * f(i) / fk).to_i}
end
n = 10
(0..10).each{|i| p [i, stirling(n, i)]}
p ""
(0..10).each{|i| p [i, stirling(n, i, 2)]}
println("最大値")
x = Int128(2)^127 - 1
println(x)
println("+1する")
println(x + 1)
println("最小値")
y = -Int128(2)^127
println(y)
println("-1する")
println(y - 1)