a+b+c的N次方展开

您所在的位置:网站首页 (a-b)五次方的公式 a+b+c的N次方展开

a+b+c的N次方展开

2023-03-22 23:40| 来源: 网络整理| 查看: 265

今天在给儿子看笔记本上的照片的时候,偶然发现了2009年手绘的一张a+b+c的N次方展开图,故写下面的博客以记之,为年轻时代的我点个赞!

20年前的我,一个充满激情的且富有专注力的数学发烧友!

10年前的我,一个无知者无畏的好写代码的疯狂的程序员!

而现在的我,一个被生活荡平了棱角的但是依然坚持理想的程序员。

言归正传,众所周知,a+b的N次方展开满足杨辉三角形。例如:

(a + b) ** 0 = 1                                   |         1(a + b) ** 1 = a + b                               |       1   1(a + b) ** 2 = a^2 + 2ab + b^2                     |     1   2   1(a + b) ** 3 = a^3 + 3a^2b + 3ab^2 + b^3           |   1   3   3   1(a + b) ** 4 = a^4 + 4a^3b + 6a^2b^2 + 4ab^3 + b^4 | 1   4   6   4   1

国外将杨辉三角形叫做帕斯卡三角形(Pascal's triangle)。 引用维基百科的gif图动态呈现如下:

那么, a+b+c的N次方展开是什么样子滴? 高二(1997年的夏天)的时候(在学完二项式定理后),作为数学发烧友的我,硬是花了一个周末,废寝忘食地纯手工计算了N=0,1,2,3,4,5,6的情况,发现了如下图所示的规律。

注:上图为2009年我用Python实现了(a+b+c)**N后重绘的图片,那时候我已经是一个疯狂的程序员:-)

o abcN.py

1 #!/usr/bin/python 2 """ 3 A rough but simple solution to count expression 4 (a + b + c) ** n = ? 5 6 By Huanian 7 On May, 2009 8 """ 9 10 import sys 11 12 def str2exp(s): 13 """ 14 1@a:2-b:1-c:1 => a^2bc 15 2@a:3-b:0-c:1 => 2a^3c 16 """ 17 i0, s0 = s.split('@') 18 sa, sb, sc = s0.split('-') 19 ca, ia = sa.split(':') 20 cb, ib = sb.split(':') 21 cc, ic = sc.split(':') 22 23 sout = "" 24 if i0 != '1': 25 sout += i0 26 if ia != '0': 27 if ia != '1': 28 s_ia = "%s^%s" % (ca, ia) 29 else: 30 s_ia = ca 31 sout += s_ia 32 if ib != '0': 33 if ib != '1': 34 s_ib = "%s^%s" % (cb, ib) 35 else: 36 s_ib = cb 37 sout += s_ib 38 if ic != '0': 39 if ic != '1': 40 s_ic = "%s^%s" % (cc, ic) 41 else: 42 s_ic = cc 43 sout += s_ic 44 return (sout) 45 46 def list2exp(lin): 47 lout = [] 48 for i in lin: 49 s = str2exp(i) 50 lout.append(s) 51 return (' + '.join(lout)) 52 53 def merge_list(lin): 54 """ 55 merge index of same entries 56 e.g. [1@a:1-b:2-c:0, 2@a:2-b:1:-c:0, 1@a:1-b:2-c:0] 57 ====> [2@a:1-b:2-c:0, 2@a:2-b:1:-c:0] 58 """ 59 ltmp = [] 60 for i in lin: 61 n, s = i.split('@') 62 if s not in ltmp: 63 ltmp.append(s) 64 65 lout = [] 66 for i in ltmp: 67 m = 0 68 for j in lin: 69 n, s = j.split('@') 70 if i == s: 71 m += int(n) 72 s = "%d@%s" % (m, i) 73 lout.append(s) 74 return (lout) 75 76 def exp_xx_1(lin): 77 """ list * ( a + b + c) """ 78 lout = [] 79 for i in lin: 80 n0, s0 = i.split('@') 81 sa, sb, sc = s0.split('-') 82 ca, ia = sa.split(':') 83 cb, ib = sb.split(':') 84 cc, ic = sc.split(':') 85 iia = int(ia) 86 iib = int(ib) 87 iic = int(ic) 88 for c in ['a', 'b', 'c']: 89 iia1 = iia 90 iib1 = iib 91 iic1 = iic 92 if c == ca: 93 iia1 += 1 94 elif c == cb: 95 iib1 += 1 96 elif c == cc: 97 iic1 += 1 98 else: 99 pass 100 s = "%s@a:%d-b:%d-c:%d" % (n0, iia1, iib1, iic1) 101 lout.append(s) 102 return (merge_list(lout)) 103 104 def exp_xx_n(lin, n): 105 if n == 0: 106 return ('1') 107 ltmp = lin 108 lout = ltmp 109 i = 1 110 while i imax: 130 print2("Your num=%d is too big,


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3