Олександр Рудик

Числа Бернуллі


(Математика в школі. – 1998. – № 2.– С.52–54)

      Існують різні етапи розв'язання задач: побудова (математичної) моделі, пошук алгоритму, програмна реалізація (раніше — отримання конкретного числа). При розв'язуванні серйозних задач всі ці етапи суттєво впливають один на одного. Глибина і продуманість моделі дає можливість зробити алгоритм простим та економним. Це легко показати на прикладі відомої задачі про подання суми k-тих степенів перших n натуральних чисел многочленом змінної n степеня k + 1.

Рівень 1
      Задачу можна звести до розв'язування системи лінійних рівнянь. Справді, нехай така сума:

pk(n) = 1k + 2k + 3k +...+ nk

є многочленом степеня (k +1) змінної n:

pk(n) = a0 n k + 1 + a1 n k + a2 n k – 1 +...+ ak n + ak + 1.

      Враховуючи зміст pk(n), маємо: pk(n) = ak + 1 = 0.
   Знайшовши значення pk(n) при n = 1, 2, 3, … , k, можемо записати і розв'язати систему лінійних рівнянь для коефіцієнтів ak + 1, ak , …, a1, a0 методом виключення змінних.

  1. p0(n) = n — рівність очевидна.

  2. p1(n) = n(n + 1)/2 — наслідок відомої формули для суми перших n членів арифметичної прогресії.

  3. Для знаходження p2(n) достатньо розв'язати таку систему лінійних рівнянь:
    a0 13 + a1 12 + a2 11 = 12;
    a0 23 + a1 22 + a2 21 = 12 + 22;
    a0 33 + a1 32 + a2 31 = 12 + 22 + 32.
    Ця система має єдиний розв'язок: a0 = 1/3, a1 = 1/2, a2 = 1/6.
    Інакше кажучи, p2(n) = n3/3 + n2/2 + n/6 = (2n3 + 3n2 + n)/6 = n(n +1)(2n + 1)/6.

Однак описаний підхід недосконалий, бо:

Рівень 2
      Для j в межах від 1 до n розглянемо таку рівність:

( j + 1)(k + 1)j(k + 1) = C 0k + 1 j 0 + C 1k + 1 j 1 + C 2k + 1 j 2 + ... + C k – 1k + 1 j k – 1 + C kk + 1 j k ,

що є наслідком біномної формули Ньютона. Знайшовши суми правої та лівої частин усіх цих рівностей при j = 1, 2, 3, ... , n, маємо:

(n + 1)k + 1 – 1 = C 0k + 1 p0(n) + C 1k + 1 p1(n) + C 2k + 1 p2(n) + ... + C k – 1k + 1 pk – 1(n) + C kk + 1 pk (n).

      Таким чином, можна отримати рекурентне (за k) співвідношення для многочленів pk(n) і довести (методом математичної індукції), що pk(n) таки справді є многочленом степеня k + 1 змінної n з раціональними коефіцієнтами. Обчислення можна здійснити за допомогою ЕОМ з використанням будь-якої мови програмування, реалізувавши арифметику многочленів з раціональними коефіцієнтами. Це особливо зручно зробити за допомогою мови аналітичних обчислень, де все це реалізовано авторами програмного продукту. Подаємо для прикладу код програми для системи алгебричних обчислень Reduce (a portable general-purpose computer algebra system), опублікованої на сайті http://reduce-algebra.sourceforge.net/.

on div;  off nat;  factor n;  
out "f:\temporar\out";
j:=20;  array a(j+1),b(j+1),p(j);
p(0):=n;         a(0):=1;   a(  1):=1;
for k:=1:j do << b(0):=1;   b(k+1):=1;
for l:=1:k do    b(l):=a(l-1)+a(l);
p(k):=((n+1)**(k+1)-1-for l:=0:(k-1) sum b(l)*p(l))/(k+1);
for l:=0:(k+1) do a(l):=b(l);
write "p_",k,"=",p(k)>>;
shut "f:\temporar\out"; end;

Тут оператори:
1-го рядка керують виведенням;
2-го рядка відкривають вихідний файл;
3-го рядка визначають найбільшу величину k, при якій буде обчислено pk(n), і замовляють пам'ять для зберігання значень біномних коефіцієнтів (масиви a і b) та многочленів;
4-го рядка задають початкове значення p0(n) = n і біномних коефіцієнтів C 01 = C 11 = 1.
      В наступних рядках (у циклі) біномні коефіцієнти обчислюються за такими формулами:
C 0k + 1 = C 1k + 1 = 1,
C lk + 1 = C l – 1k + 1 + C lk + 1 при l = 1, 2, 3, ... , k.
      7-ий рядок містить запис рекурентного співвідношення для pk(n).
      Останній рядок закриває вихідний файл. Як результат проведених за цією програмою розрахунків, маємо:

p1(n) = (1/2) n2 + (1/2) n,

p2(n) = (1/3) n3 + (1/2) n2 + (1/6) n,

p3(n) = (1/4) n4 + (1/2) n3 + (1/4) n2,

p4(n) = (1/5) n5 + (1/2) n4 + (1/3) n3 – (1/30) n,

p5(n) = (1/6) n6 + (1/2) n5 + (5/12) n4 – (1/12) n2,

p6(n) = (1/7) n7 + (1/2) n6 + (1/2) n5 – (1/6) n3 + (1/42) n,

p7(n) = (1/8) n8 + (1/2) n7 + (7/12) n6 – (7/24) n4 + (1/12) n2,

p8(n) = (1/9) n9 + (1/2) n8 + (2/3) n7 – (7/15) n5 + (2/9) n3 – (1/30) n,

p9(n) = (1/10) n10 + (1/2) n9 + (3/4) n8 – (7/10) n6 + (1/2) n4 – (3/20) n2,

p10(n) = (1/11) n11 + (1/2) n10 + (5/6) n9n7 + n5 – (1/2) n3 + (5/66) n,

p11(n) = (1/12) n12 + (1/2) n11 + (11/12) n10 – (11/8) n8 + (11/6) n6 – (11/8) n4 + (5/12) n2,

p12(n) = (1/13) n13 + (1/2) n12 + n11 – (11/6) n9 + (22/7) n7 – (33/10) n5 + (5/3) n3 – (691/2730) n,

p13(n) = (1/14) n14 + (1/2) n13 + (13/12) n12 – (143/60) n10 + (143/28) n8 – (143/20) n6 + (65/12) n4 – (691/420) n2,

p14(n) = (1/15) n15 + (1/2) n14 + (7/6) n13 – (91/30) n11 + (143/18) n9 – (143/10) n7 + (91/6) n5 – (691/90) n3 + (7/6) n,

p15(n) = (1/16) n16 + (1/2) n15 + (5/4) n14 – (91/24) n12 + (143/12) n10 – (429/16) n8 + (455/12) n6 – (691/24) n4 + (35/4) n2,

p16(n) = (1/17) n17 + (1/2) n16 + (4/3) n15 – (14/3) n13 + (52/3) n11 – (143/3) n9 + (260/3) n7 – (1382/15) n5 + (140/3) n3 – (3617/510) n,

p17(n) = (1/18) n18 + (1/2) n17 + (17/12) n16 – (17/3) n14 + (221/9) n12 – (2431/30) n10 + (1105/6) n8 – (11747/45) n6 + (595/3) n4 – (3617/60) n2,

p18(n) = (1/19) n19 + (1/2) n18 + (3/2) n17 – (34/5) n15 + 34 n13 – (663/5) n11 + (1105/3) n9 – (23494/35) n7 + 714 n5 – (3617/10) n3 + (43867/798) n,

p19(n) = (1/20) n20 + (1/2) n19 + (19/12) n18 – (323/40) n16 + (323/7) n14 – (4199/20) n12 + (4199/6) n10 – (223193/140) n8 + (2261) n6 – (68723/40) n4 + (43867/84) n2,

p20(n) = (1/21) n21 + (1/2) n20 + (5/3) n19 – (19/2) n17 + (1292/21) n15 – 323 n13 + (41990/33) n11 – (223193/63) n9 + (6460) n7 – (68723/10) n5 + (219335/63) n3 – (174611/330) n.

Рівень 3
      Задачу пошуку подання pk(n) розв'язав Я.Бернуллі (Bernulli J., Ars conjectandi, Basileae, 1713) за допомогою послідовності натуральних чисел B0, B1, B2, ... , які згодом отримали назву чисел Бернуллі і є коефіцієнтами при першому степені n у многочленах pk(n). Вони задовольняють такі рівності:

k
(1)       pk(n – 1) = (k + 1) – 1 C sk + 1 Bs n k + 1 – s.
s = 1

(k + 1) – 1 C kk + 1 = 1, тому Bk збігається з коефіцієнтом при n у розкладі pk(n – 1) за степенями n.

      З рекурентного співвідношення для многочленів і означення чисел Бернуллі (1) випливає таке рекурентне співвідношення для чисел Бернуллі:

k – 1
(2)       Bk = – (k + 1) – 1 C jk + 1 Bj.
j = 0

      Ця рівність дозволяє у розрахунках запам'ятовувати лише числа Бернулі та біномні коефіцієнти, ощадливо використовувати пам'ять ЕОМ і обчислити числа Бернуллі Bk при досить великих k. Програма стає ще простішою.

out "f:\temporar\out";
off nat;  j:=100;  array a(j+1),b(j+1),p(j);
p(0):=1;         a(0):=1;   a(  1):=1;
for k:=1:j do << b(0):=1;   b(k+1):=1;
for l:=1:k do    b(l):=a(l-1)+a(l);
p(k):=(-for l:=0:(k-1) sum b(l)*p(l))/(k+1);
for l:=0:(k+1) do a(l):=b(l);
write "B_{",k,"}=",p(k)>>;
shut "f:\temporar\out";
end;

Таким чином, маємо:
B0 = 1;
B1 = –1/2;
B2 = 1/6;
B4 = – 1/30;
B6 = 1/42;
B8 = – 1/30;
B10 = 5/66;
B12 = – 691/2730;
B14 = 7/6;
B16 = – 3617/510;
B18 = 43867/798;
B20 = – 174611/330;
B22 = 854513/138;
B24 = – 236364091/2730;
B26 = 8553103/6;
B28 = – 23749461029/870;
B30 = 8615841276005/14322;
B32 = – 7709321041217/510;
B34 = 2577687858367/6;
B36 = – 26315271553053477373/1919190;
B38 = 2929993913841559/6;
B40 = – 261082718496449122051/13530;
B42 = 1520097643918070802691/1806;
B44 = – 27833269579301024235023/690;
B46 = 596451111593912163277961/282;
B48 = – 5609403368997817686249127547/46410;
B50 = 495057205241079648212477525/66;
B52 = – 801165718135489957347924991853/1590;
B54 = 29149963634884862421418123812691/798;
B56 = – 2479392929313226753685415739663229/870;
B58 = 84483613348880041862046775994036021/354;
B60 = – 1215233140483755572040304994079820246041491/56786730;
B62 = 12300585434086858541953039857403386151/6;
B64 = – 106783830147866529886385444979142647942017/510;
B66 = 1472600022126335654051619428551932342241899101/64722;
B68 = – 78773130858718728141909149208474606244347001/30;
B70 = 1505381347333367003803076567377857208511438160235/4686;
B72 = – 5827954961669944110438277244641067365282488301844260429/140100870;
B74 = 34152417289221168014330073731472635186688307783087/6;
B76 = – 24655088825935372707687196040585199904365267828865801/30;
B78 = 414846365575400828295179035549542073492199375372400483487/3318;
B80 = – 4603784299479457646935574969019046849794257872751288919656867/230010;
B82 = 1677014149185145836823154509786269900207736027570253414881613/498;
B84 = – 2024576195935290360231131160111731009989917391198090877281083932477/3404310;
B86 = 660714619417678653573847847426261496277830686653388931761996983/6;
B88 = – 1311426488674017507995511424019311843345750275572028644296919890574047/61410;
B90 = 1179057279021082799884123351249215083775254949669647116231545215727922535/272118;
B92 = – 1295585948207537527989427828538576749659341483719435143023316326829946247/1410;
B94 = 1220813806579744469607301679413201203958508415202696621436215105284649447/6;
B96 = –211600449597266513097597728109824233673043954389060234150638733420050668349987259/4501770;
B98 = 67908260672905495624051117546403605607342195728504487509073961249992947058239/6;
B100 = – 94598037819122125295227433069493721872702841533066936133385696204311395415197247711/33330.
      У 1997 році учнями УФМЛ на IBM286 підраховано B278, знаменник якого дорівнює 6, а десятковий запис чисельника:

32885742727913259837072581966483953705963057583416
99742238893225440550539879910098002426164478935667
75966690766963898661670913779920037716055951612581
27954571249925077855602662654691723993291132474210
69765604730822849303184464007727659407021486798188
92725313917604616677818147266999416190027867185569
1024038916704559966546186751742476372279

містить 340 цифр.

      Числа Бернуллі з непарними номерами, за виключенням 1-го, дорівнюють 0, а знаки чисел Бернуллі з парними номерами чергуються. «Математическая энциклопедия» за редакцією І.М.Виноградова (Москва, «Советская энциклопедия», 1977), звідки взято історичну довідку, містить перелік літератури та відомості про зв'язок з теорією функцій — розклад у степеневі ряди деяких елементарних функцій, зв'язок з дзета-функцією Рімана тощо.

Висновки
      Нами розглянуто такі 3 способи розв'язання задачі.

  1. Зведення до системи лінійних рівнянь відносно коефіцієнтів шуканих многочленів з наступним доведенням методом математичної індукції справедливості знайденого подання;

  2. Використання рекурентного співвідношення для шуканих многочленів;

  3. Використання рекурентного співвідношення для чисел Бернуллі, що пропорційні коефіцієнтам шуканих многочленів.

      Другий спосіб від першого відрізнявся більш продуманим алгоритмом, третій від другого — більш продуманою моделлю. І саме останній спосіб дозволяє провести розрахунки для якомога більшого значення k. Інакше кажучи, не варто економити на продумуванні алгоритму та, особливо, моделі, бо ці витрати вернуться. Інколи, можливістю взагалі розв'язати задачу.