九章算术均徭赋
        
        贾谊在27岁时向汉文帝进献的《治安策》一文,洋洋洒洒6844个字,写了汉帝国开国30年时的九件让他忧伤难过的事情,所谓『可为痛哭者一,可为流涕者二,可为长太息者六』,可痛哭者是“诸侯权大”,可流涕者“匈奴侵边”和“耽于射猎”,可长太息者是“民风奢侈”、“民俗败坏”、“君臣失纪”、“太子不习”、“国君无威”、“赏罚不严”这六件事情。汉帝国从秦末一片废墟起步,经过三十年“绝圣弃智、绝巧弃利、上德不德、上善若水”的“无为而治”,让市场经济充分地自由运作,使得民间工商业焕发出了蓬勃生机,以致于富人家的墙壁都有精美装饰,使唤的僮仆都衣着光鲜亮丽,『民卖僮者,为之绣衣丝履偏诸缘;庶人屋壁得为帝服,倡优下贱得为后饰;富民墙屋被文绣,庶人孽妾缘其履』,百姓的衣食用度比皇家的规格还要高。但是贾谊并不为百姓富足和安康而兴奋,而是为皇权受到超越和威胁而忧愁,皇帝一家自己都没觉得有什么不妥,他偏要跳出来痛哭流涕,好像立马要国将不国了似的。
        
        贾谊如同“林黛玉”一般多愁善感,才华横溢却又言过其实,他的老师“张苍”则是脚踏实地,一步一个脚印地干好份内之事,就如同那个年代大多数的臣僚宦吏一样。张苍出生于公元前256年,他的一生活了94岁。他是“荀子”的学生,但在他18岁时“荀子”就死去了。他出任过秦朝的御史,后来跟随刘邦一起闹革命。因为颜值很高,他逃过了一次被斩首的危机;因为颇有功劳,他后来列任各郡国的“国相”;因为精通计算,他长期负责国家财政审计。在他负责审计各郡国会计帐簿的那些年里,他增订和删补了著名的数学教材《九章算术》,划分为方田、粟米、衰分、少广、商功、均输、盈不足、方程、勾股九章。
        
        《九章算术》的方田章共有题38个,粟米章共有题46个,衰分章共有题20个,少广章共有题24个,商功章共有题29个,均输章共有题28个,盈不足章共有题21个,方程章共有题18个,勾股章共有题24个,九章题共计248个,在计算机程式帮助下,需20小时完成,如果只使用计算器,需100小时完成,如果纯手工计算,需500小时完成。那个年代没有小数系统,只使用分数进行计算,人们也不刻意区分单位的维度,单位的维度隐藏在问题上下文中,经常可以看到“步”和“尺”贯穿使用于长度、面积、体积系统中。人们用“少半”指代1/3,用“太半”指代2/3,并用“如、却、损、益”等词指代加减,这些都具有浓厚的时代气息。在“九章算术”中,等差数列和等比数列的运用经常可见,等差数列的和会带来一元二次方程的求解问题,等比数列的和则会带来指数方程的求解问题。
        
        《九章算术》的“方田章”引入了包括加、减、乘、除、约分、通分在内的“分数”基本运算,并给出了“方田”,也就是矩形田,“圭田”,也就是三角形田,“邪田”,也就是直角梯形田,“箕田”,也就是等腰梯形田,“圆田”,也就是圆形田,“宛田”,也就是扇形田,“弧田”,也就是弓形田,“环田”,也就是环形田等多种类型田地的面积计算实例。那个时代对“割圆术”还没有深入研究,因此以“3”作为圆周率来代入计算,与圆相关的形状也不完全严格,但用于工农业生产,却是可以方便地口算出结果。“少广章”可以看作“方田章”的逆运算,是根据田地的面积算出边长,主要涉及到分数的除法,还涉及了手算“开平方”、“开立方”运算。
        
        《九章算术》的“粟米章”,对百姓主食的“粟、菽、答、麻、麦、稻、豉(Chi1)”,也就是各种谷子豆子,“粝米”、“稗米”、“绺米”、“御米”,也就是各种精细度的米,“粝饭、稗饭、绺饭、御饭”,也就是各种饭食,“飧、熟菽、浆”,也就是稀饭、米汤等食物,给出了代换比例,这些比例的意义在于进行粮食配送时,即使粮食种类不同,也能保证价值相当。这些代换比例大致是1份米相当于1.5份谷子,相当于2.5份饭食,相当于4份稀饭。
        
        《九章算术》的“衰分章”,反映的是“集合部分”按照各自的权重对“集合整体”进行分配的计算,对“等差数列”和“等比数列”已经有所涉及,主要应用场景是徭役任务的公平分配。“商功章”、“均输章”跟“衰分章”一样,都与徭役、赋税任务的公平分配紧密相关。“商功章”对各种几何体的体积,包括棱柱、圆柱、棱台(称作“方亭”)、圆台(称作“圆亭”)、方锥、圆锥、三棱柱(称作“堑堵”)、三棱锥(称作“阳马”)、四面体(称作“鳖臑(Bie1Nao4)”)、直五面楔体(称作“羡除”,它的特例是“刍甍(Hong1)”)、两个等高“刍甍(Hong1)”合成的六面体(有“刍童”、“冥谷”等,圆弧化后有“曲池”、“盘池”等),以及平地、靠墙、靠角落堆放谷物的体积等都进行了计算。“均输章”主要应用于计算赋税输送,综合考虑了人口、运费、耗时等诸多方面的问题。此外,它还涉及到了兑换、追逐、相遇、合作都方面的问题。
        
        《九章算术》的后三章和“张苍”无关,是后人增加上去的,它们不涉及民生、徭役、赋税的具体问题,只是纯粹的数学问题。在“盈不足章”中,涉及到了二元一次方程组,以及等差数列和等比数列的求和。在“方程章”中,从二元一次方程组到六元一次方程组都有所涉及,在“勾股章”中,则涉及到了一元二次方程组和二元二次方程组的求解,以及相似三角形的应用和计算。
        

---------------------

附:九章算术全解

一:《方田》

[方田术曰:广从步数相乘得积步。以亩法二百四十步除之,即亩数。百亩为一顷。]
S = W * L / 240

1、方田:今有田广十五步,从十六步。问为田几何?
  答曰:一亩。
>>> 15*16
240

2、方田:又有田广十二步,从十四步。问为田几何?
  答曰:一百六十八步。
>>> 12*14
168

/
[里田术曰:广从里数相乘得积里。以三百七十五乘之,即亩数。]
S = W * L / 375

3、方田:今有田广一里,从一里。问为田几何?
  答曰:三顷七十五亩。
>>> 375*240
90000
>>> _**0.5
300.0 [1里 = 300步]
>>> 90000/240
375.0 [1 平方里 = 375 亩]

4、方田:又有田广二里,从三里。问为田几何?
  答曰:二十二顷五十亩。
>>> 2*3*90000/240
2250.0

/
[约分术曰:可半者半之,不可半者,副置分母子之数,以少减多,更相减损,求其等也。以等数约之。]

5、方田:今有十八分之十二。问约之得几何?
  答曰:三分之二。

>>> 12/18
0.6666666666666666

6、方田:又有九十一分之四十九。问约之得几何?
  答曰:十三分之七。
>>> 49/91
0.5384615384615384
>>> 7/13
0.5384615384615384

//
[合分术曰:母互乘子,并以为实,母相乘为法,实如法而一。不满法者,以法命之。其母同者,直相从之。]

7、方田:今有三分之一,五分之二。问合之得几何?
  答曰:十五分之十一。
>>> 1/3+2/5
0.7333333333333334
>>> 11/15
0.7333333333333333

8、方田:又有三分之二,七分之四,九分之五。问合之得几何?
  答曰:得一、六十三分之五十。
>>> 2/3+4/7+5/9
1.7936507936507937
>>> 1+50/63
1.7936507936507935

9、方田:又有二分之一,三分之二,四分之三,五分之四。问合之得几何?
  答曰:得二、六十分之四十三。
>>> 1/2+2/3+3/4+4/5
2.716666666666667
>>> 2+43/60
2.716666666666667

//
[减分术曰:母互乘子,以少减多,馀为实,母相乘为法,实如法而一。]

10、方田:今有九分之八,减其五分之一。问馀几何?
  答曰:四十五分之三十一。

>>> 8/9-1/5
0.6888888888888889
>>> 31/45
0.6888888888888889

11、方田:又有四分之三,减其三分之一。问馀几何?
  答曰:十二分之五。

>>> 3/4-1/3
0.4166666666666667
>>> 5/12
0.4166666666666667

//
[课分术曰:母互乘子,以少减多,馀为实,母相乘为法,实如法而一,即相多也。]
12、方田:今有八分之五,二十五分之十六。问孰多?多几何?
  答曰:二十五分之十六多,多二百分之三。
>>> 5/8-16/25
-0.015000000000000013
>>> 3/200
0.015

13、方田:又有九分之八,七分之六。问孰多?多几何?
  答曰:九分之八多,多六十三分之二。
>>> 8/9-6/7
0.031746031746031744
>>> 2/63
0.031746031746031744

14、方田:又有二十一分之八,五十分之十七。问孰多?几何?
  答曰:二十一分之八多,多一千五十分之四十三。
>>> 8/21-17/50
0.04095238095238091
>>> 43/1050
0.040952380952380955

//
[平分术曰:母互乘子,副并为平实,母相乘为法。以列数乘未并者各自为列实。亦以列数乘法,以平实减列实,馀,约之为所减。并所减以益于少,以法命平实,各得其平。]

15、方田:今有三分之一,三分之二,四分之三。问减多益少,各几何而平?
  答曰:减四分之三者二,三分之二者一,并以益三分之一,而各平于十二分之七。 

>>> (1/3+2/3+3/4)/3
0.5833333333333334
>>> 7/12
0.5833333333333334

16、方田:又有二分之一,三分之二,四分之三。问减多益少,各几何而平?
  答曰:减三分之二者一,四分之三者四,并以益二分之一,而各平于三十六分之二十三。
  
>>> (1/2+2/3+3/4)/3
0.6388888888888888
>>> 23/36
0.6388888888888888

//
[经分术曰:以人数为法,钱数为实,实如法而一。有分者通之,重有分者同而通之。]

17、方田:今有七人,分八钱三分钱之一。问人得几何?
  答曰:人得一钱、二十一分钱之四。
>>> (8+1/3)/7
1.1904761904761905
>>> 1+4/21
1.1904761904761905

18、方田:又有三人,三分人之一,分六钱三分钱之一,四分钱之三。问人得几何?
  答曰:人得二钱、八分钱之一。
>>> (6+1/3+3/4)/(3+1/3)
2.125
>>> 2+1/8
2.125

//
[乘分术曰:母相乘为法,子相乘为实,实如法而一。]

19、方田:今有田广七分步之四,从五分步之三。问为田几何?
  答曰:三十五分步之十二。

>>> 4/7*3/5
0.34285714285714286
>>> 12/35
0.34285714285714286

20、方田:又有田广九分步之七,从十一分步之九。问为田几何?
  答曰:十一分步之七。
>>> 7/9*9/11
0.6363636363636364
>>> 7/11
0.6363636363636364

21、方田:又有田广五分步之四,从九分步之五,问为田几何?
  答曰:九分步之四。
>>> 4/5*5/9
0.4444444444444444
>>> 4/9
0.4444444444444444

//
[大广田术曰:分母各乘其全,分子从之,相乘为实。分母相乘为法。实如法而一。]

22、方田:今有田广三步、三分步之一,从五步、五分步之二。问为田几何?
  答曰:十八步。
>>> (3+1/3)*(5+2/5)
18.000000000000004

23、方田:又有田广七步、四分步之三,从十五步、九分步之五。问为田几何?
  答曰:一百二十步、九分步之五。
>>> (7+3/4)*(15+5/9)
120.55555555555556
>>> 120+5/9
120.55555555555556

24、方田:又有田广十八步、七分步之五,从二十三步、十一分步之六。问为田几何?
  答曰:一亩二百步、十一分步之七。
>>> (18+5/7)*(23+6/11)
440.6363636363637
>>> 240+200+7/11
440.6363636363636

//
[术曰:半广以乘正从。 ]
S = 1/2 * a * h 三角形面积

25、方田:今有圭田广十二步,正从二十一步。问为田几何?
  答曰:一百二十六步。
>>> 12*21/2
126.0

26、方田:又有圭田广五步、二分步之一,从八步、三分步之二。问为田几何?
  答曰:二十三步、六分步之五。
>>> 23+5/6
23.833333333333332
>>> 5.5*8.67/2
23.8425 

//
[术曰:并两邪而半之,以乘正从若广。又可半正从若广,以乘并,亩法而一。]
S = 1/2 * (a + b) * h 直角梯形面积

27、方田:今有邪田,一头广三十步,一头广四十二步,正从六十四步。问为田几何?
  答曰:九亩一百四十四步。
>>> f = lambda a, b, h:(a+b)*h/2
>>> f(30, 42, 64)
2304.0
>>> 9*240+144
2304

28、方田:又有邪田,正广六十五步,一畔从一百步,一畔从七十二步。问为田几何?
  答曰:二十三亩七十步。
>>> f = lambda a, b, h:(a+b)*h/2
>>> f(100,72,65)
5590.0
>>> 23*240+70
5590

//
[术曰:并踵舌而半之,以乘正从。亩法而一。]
S = 1/2 * (a + b) * h 等腰梯形面积

29、方田:今有箕田,舌广二十步,踵广五步,正从三十步。问为田几何?
  答曰:一亩一百三十五步。
>>> f = lambda a, b, h:(a+b)*h/2
>>> f(20,5,30)
375.0
>>> 240+135
375

30、方田:又有箕田,舌广一百一十七步,踵广五十步,正从一百三十五步。问为田几何?
  答曰:四十六亩二百三十二步半。
>>> f(117,50,135)
11272.5
>>> 46*240+232.5
11272.5

//
[术曰:半周半径相乘得积步。又术曰:周径相乘,四而一。又术曰:径自相乘,三之,四而一。又术曰:周自相乘,十二而一。]

注:这里的圆田都不是“正圆”,圆周率还没有被求解出来,大致以3倍代替

31、方田:今有圆田,周三十步,径十步。问为田几何?
  答曰:七十五步。
>>> 30*10/4
75.0
#实际值:
>>> 3.14*25
78.5

32、方田:又有圆田,周一百八十一步,径六十步、三分步之一。问为田几何?
  答曰:十一亩九十步、十二分步之一。
>>> 11*240+90+1/12
2730.0833333333335
>>> 181*60.33/4
2729.9325
#实际值:
>>> 60.33**2/4*3.14
2857.1714865

//
[术曰:以径乘周,四而一。]
S = L * R 扇形面积

33、方田:今有宛田,下周三十步,径十六步。问为田几何?
  答曰:一百二十步。
>>> 30*16/4
120.0

34、方田:又有宛田,下周九十九步,径五十一步。问为田几何?
  答曰:五亩六十二步、四分步之一。
>>> 99*51/4
1262.25
>>> 5*240+62.25
1262.25

//
[术曰:以弦乘矢,矢又自乘,并之,二而一。]
S = (c * h + h * h)/2 #这种方法计算弓形面积是不够准确的

35、方田:今有弧田,弦三十步,矢十五步。问为田几何?
  答曰:一亩九十七步半。
    import math;
    h = 13+7/9;
    c = 78.5;
    alpha = math.atan(h/c*2)*2; #弓形圆心角的一半
    R = c/2/math.sin(alpha); #圆半径
    S_tri = c/2*R*math.cos(alpha)/2; #三角形面积
    S_fan = 0.5*alpha * R**2; #扇形面积
    S = (S_fan-S_tri)*2
    print(S_tri, S_fan);
    print('弓形面积:', S);
>>> 
6.8886382452038615e-15 176.71458676442586
弓形面积: 353.4291735288517
>>> 240+97.5
337.5 
#误差率4.5%
>>> (353.43-337.5)/353.43
0.04507257448433921

36、方田:又有弧田,弦七十八步、二分步之一,矢十三步、九分步之七。问为田几何?
  答曰:二亩一百五十五步、八十一分步之五十六。
>>> 
961.9904408882169 1331.243226190979
弓形面积: 738.5055706055241
>>> 2*240+155+56/81
635.6913580246913 #误差率在14%

//
[术曰:并中外周而半之,以径乘之为积步。
密率术曰:置中外周步数,分母、子各居其下。母互乘子,通全步,内分子。以中周减外周,馀半之,以益中周。径亦通分内子,以乘周为实。分母相乘为法,除之为积步,馀积步之分。以亩法除之,即亩数也。]
S = (L1 + L2)/2*D #实用价值高,但并不是精确的圆

37、方田:今有环田,中周九十二步,外周一百二十二步,径五步。问为田几何?
  答曰:二亩五十五步。
>>> s = lambda L1, L2: 3.142*((L1/6.284)**2-(L2/6.284)**2); #L1 > L2
>>> s(122, 92);
510.82113303628284
>>> (92+122)*5/2
535.0
>>> 2*240+55
535

38、方田:又有环田,中周六十二步、四分步之三,外周一百一十三步、二分步之一,径十二步、三分步之二。问为田几何?
  答曰:四亩一百五十六步、四分步之一。
>>> s = lambda L1, L2: 3.142*((L1/6.284)**2-(L2/6.284)**2); #L1 > L2
>>> s(113.5, 62.75);
711.703333863781
>>> 4*240+156.25
1116.25
>>> (62.75+113.5)*12.67/2
1116.54375

/

二:《粟米》

粟米:粟米之法:粟率五十;粝米三十
  稗米二十七;绺米二十四
  御米二十一;小?十三半
  大?五十四;粝饭七十五
  稗饭五十四;绺饭四十八
  御饭四十二;菽、答、麻、麦各四十五
  稻六十;豉六十三
  飧九十;熟菽一百三半
  櫱一百七十五
  今有术曰:以所有数乘所求率为实,以所有率为法,实如法而一。

scale = [['小',13.5],['御米',21],['绺米',24],['稗米',27],\
             ['粝米',30],['御饭',42],['菽',45],\
             ['答',45],['麻',45],['麦',45],\
             ['绺饭',48],\
             ['粟', 50],['大',54],['稻',60], ['豉',63],['粝饭',75],\
             ['飧',90],['熟菽',103.5],['浆',175]];

food1 = '粟';
    food2 = '粝米';

a1 = 0;
    a2 = 0;

for i in range(len(scale)):
        if scale[i][0] == food1:
            a1 = scale[i][1];
        if scale[i][0] == food2:
            a2 = scale[i][1];

print(a1,food1, '=', a2, food2);

[注:粟产量0.15公斤/平米]

//
[术曰:以粟求粝米,三之,五而一。]

1、粟米:今有粟一斗,欲为粝米。问得几何?
  答曰:为粝米六升。
>>> 
50 粟 = 30 粝米

//
[术曰:以粟求稗米,二十七之,五十而一。]
2、粟米:今有粟二斗一升,欲为稗米。问得几何?
  答曰:为稗米一斗一升、五十分升之十七。
>>> 
50 粟 = 27 稗米
11.34

//
[术曰:以粟求绺米,十二之,二十五而一。]
3、粟米:今有粟四斗五升,欲为绺米。问得几何?
  答曰:为绺米二斗一升、五分升之三。
>>> 
50 粟 = 24 绺米
21.6
  
[术曰:以粟求御米,二十一之,五十而一。]
4、粟米:今有粟七斗九升,欲为御米。问得几何?
  答曰:为御米三斗三升、五十分升之九。
>>> 
50 粟 = 21 御米
33.18 

5、粟米:今有粟一斗,欲为小?。问得几何?
  答曰:为小?二升、一十分升之七。
  术曰:以粟求小?,二十七之,百而一。

6、粟米:今有粟九斗八升,欲为大?。问得几何?
  答曰:为大?一十斗五升、二十五分升之二十一。
  术曰:以粟求大?,二十七之,二十五而一。

7、粟米:今有粟二斗三升,欲为粝饭。问得几何?
  答曰:为粝饭三斗四升半。
  术曰:以粟求粝饭,三之,二而一。

8、粟米:今有粟三斗六升,欲为稗饭。问得几何?
  答曰:为稗饭三斗八升、二十五分升之二十二。
  术曰:以粟求稗饭,二十七之,二十五而一。

9、粟米:今有粟八斗六升,欲为绺饭。问得几何?
  答曰:为绺饭八斗二升、二十五分升之一十四。
  术曰:以粟求绺饭,二十四之,二十五而一。

10、粟米:今有粟九斗八升,欲为御饭。问得几何?
  答曰:为御饭八斗二升、二十五分升之八。
  术曰:以粟求御饭,二十一之,二十五而一。

11、粟米:今有粟三斗少半升,欲为菽。问得几何?
  答曰:为菽二斗七升、一十分升之三。

12、粟米:今有粟四斗一升、太半升,欲为答。问得几何?
  答曰:为答三斗七升半。

13、粟米:今有粟五斗、太半升,欲为麻。问得几何?
  答曰:为麻四斗五升、五分升之三。

14、粟米:今有粟一十斗八升、五分升之二,欲为麦。问得几何?
  答曰:为麦九斗七升、二十五分升之一十四。
  术曰:以粟求菽、答、麻、麦,皆九之,十而一。

15、粟米:今有粟七斗五升、七分升之四,欲为稻。问得几何?
  答曰:为稻九斗、三十五分升之二十四。
  术曰:以粟求稻,六之,五而一。

16、粟米:今有粟七斗八升,欲为豉。问得几何?
  答曰:为豉九斗八升、二十五分升之七。
  术曰:以粟求豉,六十三之,五十而一。

17、粟米:今有粟五斗五升,欲为飧。问得几何?
  答曰:为飧九斗九升。
  术曰:以粟求飧,九之,五而一。

18、粟米:今有粟四斗,欲为熟菽。问得几何?
  答曰:为熟菽八斗二升、五分升之四。
  术曰:以粟求熟菽,二百七之,百而一。

19、粟米:今有粟二斗,欲为櫱。问得几何?
  答曰:为櫱七斗。
  术曰:以粟求櫱,七之,二而一。

20、粟米:今有粝米十五斗五升、五分升之二,欲为粟。问得几何?
  答曰:为粟二十五斗九升。
  术曰:以粝米求粟,五之,三而一。

21、粟米:今有稗米二斗,欲为粟。问得几何?
  答曰:为粟三斗七升、二十七分升之一。
  术曰:以稗米求粟,五十之,二十七而一。

22、粟米:今有绺米三斗、少半升,欲为粟。问得几何?
  答曰:为粟六斗三升、三十六分升之七。
  术曰:以绺米求粟,二十五之,十三而一。

23、粟米:今有御米十四斗,欲为粟。问得几何?
  答曰:为粟三十三斗三升、少半升。
  术曰:以御米求粟,五十之,二十一而一。

24、粟米:今有稻一十二斗六升、一十五分升之一十四,欲为粟。问得几何?
  答曰:为粟一十斗五升、九分升之七。
  术曰:以稻求粟,五之,六而一。

25、粟米:今有粝米一十九斗二升、七分升之一,欲为稗米。问得几何?
  答曰:为稗米一十七斗二升、一十四分升之一十三。
  术曰:以粝米求稗米,九之,十而一。

26、粟米:今有粝米六斗四升、五分升之三,欲为粝饭。问得几何?
  答曰:为粝饭一十六斗一升半。
  术曰:以粝米求粝饭,五之,二而一。

27、粟米:今有粝饭七斗六升、七分升之四,欲为飧。问得几何?
  答曰:为飧九斗一升、三十五分升之三十一。
  术曰:以粝饭求飧,六之,五而一。

28、粟米:今有菽一斗,欲为熟菽。问得几何?
  答曰:为熟菽二斗三升。
  术曰:以菽求熟菽,二十三之,十而一。

29、粟米:今有菽二斗,欲为豉。问得几何?
  答曰:为豉二斗八升。
  术曰:以菽求豉,七之,五而一。

30、粟米:今有麦八斗六升、七分升之三,欲为小?,问得几何?
  答曰:为小?二斗五升、一十四分升之一十三。
  术曰:以麦求小?,三之,十而一。

31、粟米:今有麦一斗,欲为大?。问得几何?
  答曰:为大?一斗二升。
  术曰:以麦求大?,六之,五而一。

//
[经率术曰:以所买率为法,所出钱数为实,实如法得一钱。]

32、粟米:今有出钱一百六十,买瓴甓十八枚。问枚几何?
  答曰:一枚,八钱、九分钱之八。
>>> 160/18
8.88888888888889

33、粟米:今有出钱一万三千五百,买竹二千三百五十个。问个几何?
  答曰:一个,五钱、四十七分钱之三十五。
>>> 13500/2350
5.74468085106383
>>> 5+35/47
5.74468085106383
  
//
[经术术曰:以所求率乘钱数为实,以所买率为法,实如法得一。]

34、粟米:今有出钱五千七百八十五,买漆一斛六斗七升、太半升。欲斗率之,问斗几何。
  答曰:一斗,三百四十五钱、五百三分钱之一十五。
>>> 5785/16.75
345.3731343283582
>>> 345+15/503
345.02982107355865

35、粟米:今有出钱七百二十,买缣一匹二丈一尺。欲丈率之,问丈几何?
  答曰:一丈,一百一十八钱、六十一分钱之二。
>>> 720/(4+2+0.1)
118.03278688524591
>>> 118+2/61
118.0327868852459 (一匹 = 4丈)

36、粟米:今有出钱二千三百七十,买布九匹二丈七尺。欲匹率之,问匹几何?
  答曰:一匹,二百四十四钱、一百二十九分钱之一百二十四。
>>> 2370/(9*4+2+0.7)*4
244.9612403100775
>>> 244+124/129
244.96124031007753

37、粟米:今有出钱一万三千六百七十,买丝一石二钧一十七斤。欲石率之,问石几何?
  答曰:一石,八千三百二十六钱、一百九十七分钱之一百七十八。
>>> 13670/(1+0.5+17/120)
8326.903553299493
>>> 8326+178/197
8326.903553299493 (1石 = 4钧 = 120斤)

//
[其率术曰:各置所买石、钧、斤、两以为法,以所率乘钱数为实,实如法而一。不满法者反以实减法,法贱实贵。]

38、粟米:今有出钱五百七十六,买竹七十八个。欲其大小率之,问各几何?
  答曰:其四十八个,个七钱。其三十个,个八钱。
    money = 576;
    num = 78;

price = money // num;
    num1 = money - price *num;
    num2 = num - num1;

print(num1,'--', price+1, ', ', num2, '--', price);

>>> 
30 -- 8 ,  48 -- 7

39、粟米:今有出钱一千一百二十,买丝一石二钧十八斤。欲其贵贱斤率之,问各几何?
  答曰:其二钧八斤,斤五钱。其一石一十斤,斤六钱。
    money = 1120;
    num = 198;

price = money // num;
    num1 = money - price *num;
    num2 = num - num1;

print(num1,'--', price+1, ', ', num2, '--', price);

>>> 
130 -- 6 ,  68 -- 5

40、粟米:今有出钱一万三千九百七十,买丝一石二钧二十八斤三两五铢。欲其贵贱石率之,问各几何?
  答曰:其一钧九两一十二铢,石八千五十一钱。其一石一钧二十七斤九两一十七铢,石八千五十二钱。
>>> (30+9/16+12/24/16)*(8051/120)+(177+9/16+17/24/16)*8052/120
13970.0 # 24株=1两, 16两 = 1斤

41、粟米:今有出钱一万三千九百七十,买丝一石二钧二十八斤三两五铢。欲其贵贱钧率之,问各几何?
  答曰:其七斤一十两九铢,钧二千一十二钱。其一石二钧二十斤八两二十铢,钧二千一十三钱。
>>> 13970/(6+28/30+(3+5/24)/16/30)
2012.9632640808513

42、粟米:今有出钱一万三千九百七十,买丝一石二钧二十八斤三两五铢。欲其贵贱斤率之,问各几何?
  答曰:其一石二钧七斤十两四铢,斤六十七钱。其二十斤九两一铢,斤六十八钱。
>>> 13970/(6+28/30+(3+5/24)/16/30)/30
67.09877546936171

43、粟米:今有出钱一万三千九百七十,买丝一石二钧二十八斤三两五铢。欲其贵贱两率之,问各几何?
  答曰:其一石一钧一十七斤一十四两一铢,两四钱。其一钧一十斤五两四铢,两五钱。
>>> 13970/(6+28/30+(3+5/24)/16/30)/30/16
4.193673466835107

///
[反其率术曰:以钱数为法,所率为实,实如法而一。不满法者反以实减法,法少,实多。二物各以所得多少之数乘法实,即物数。]

44、粟米:今有出钱一万三千九百七十,买丝一石二钧二十八斤三两五铢。欲其贵贱铢率之,问各几何?
  答曰:其一钧二十斤六两十一铢,五铢一钱。其一石一钧七斤一十二两一十八铢,六铢一钱。

>>> 13970/(6+28/30+(3+5/24)/16/30)/30/16/24
0.1747363944514628

45、粟米:今有出钱六百一十,买羽二千一百翭。欲其贵贱率之,问各几何?
  答曰:其一千一百四十翭,三翭一钱。其九百六十翭,四翭一钱。
>>> 610/2100
0.2904761904761905

46、粟米:今有出钱九百八十,买矢簳五千八百二十枚。欲其贵贱率之,问各几何?
  答曰:其三百枚,五枚一钱。其五千五百二十枚,六枚一钱。
>>> 980/5820
0.16838487972508592

///

三:《衰分》

[衰分:衰分术曰:各置列衰,副并为法,以所分乘未并者各自为实,实如法而一。不满法者,以法命之。]

[术曰:列置爵数,各自为衰,副并为法。以五鹿乘未并者,各自为实。实如法得一鹿。]

1、衰分:今有大夫、不更、簪裹、上造、公士,凡五人,共猎得五鹿。欲以爵次分之,问各得几何?
  答曰:大夫得一鹿、三分鹿之二。不更得一鹿、三分鹿之一。簪裹得一鹿。上造得三分鹿之二。公士得三分鹿之一。
 
    a = list(range(1,6));
    total = sum(a);

mul = 5;
    
    for i in range(len(a)-1, -1, -1):
        print(mul * a[i]/total, end = ', ');

>>> 
1.6666666666666667, 1.3333333333333333, 1.0, 0.6666666666666666, 0.3333333333333333,

[术曰:置牛四、马二、羊一,各自为列衰,副并为法。以五斗乘未并者各自为实。实如法得一斗。]

2、衰分:今有牛、马、羊食人苗。苗主责之粟五斗。羊主曰:“我羊食半马。”马主曰:“我马食半牛。”今欲衰偿之,问各出几何?
  答曰:牛主出二斗八升、七分升之四。马主出一斗四升、七分升之二。羊主出七升、七分升之一。
  
    a = [1, 2, 4];
    total = sum(a);

mul = 5;
    
    for i in range(len(a)-1, -1, -1):
        print(mul * a[i]/total, end = ', ');
>>> 
2.857142857142857, 1.4285714285714286, 0.7142857142857143,

[术曰:各置钱数为列衰,副并为法,以百钱乘未并者,各自为实,实如法得一钱。]

3、衰分:今有甲持钱五百六十,乙持钱三百五十,丙持钱一百八十,凡三人俱出关,关税百钱。欲以钱数多少衰出之,问各几何?
  答曰:甲出五十一钱、一百九分钱之四十一。乙出三十二钱、一百九分钱之一十二。丙出一十六钱、一百九分钱之五十六。
  
    a = [560, 350, 180];
    total = sum(a);

mul = 100;
    
    for i in range(len(a)):
        print(mul * a[i]/total, end = ', ');
    
>>> 
51.37614678899082, 32.11009174311926, 16.513761467889907,

[术曰:置一、二、四、八、十六为列衰,副并为法,以五尺乘未并者,各自为实,实如法得一尺。]

4、衰分:今有女子善织,日自倍,五日织五尺。问日织几何?
  答曰:初日织一寸、三十一分寸之十九。次日织三寸、三十一分寸之七。次日织六寸、三十一分寸之十四。次日织一尺二寸、三十一分寸之二十八。次日织二尺五寸、三十一分寸之二十五。
 
    a = [1]*5;

for i in range(1, len(a)):
        a[i] = a[i-1]*2;
    
    total = sum(a);

mul = 5;
    
    for i in range(len(a)):
        print(mul * a[i]/total, end = ', ');
 
>>> 
0.16129032258064516, 0.3225806451612903, 0.6451612903225806, 1.2903225806451613, 2.5806451612903225,

[术曰:各置算数为列衰,副并为法,以所发傜人数乘未并者,各自为实,实如法得一人。]
5、衰分:今有北乡算八千七百五十八,西乡算七千二百三十六,南乡算八千三百五十六,凡三乡,发傜三百七十八人。欲以算数多少衰出之,问各几何?
  答曰:北乡遣一百三十五人、一万二千一百七十五分人之一万一千六百三十七。西乡遣一百一十二人、一万二千一百七十五分人之四千四。南乡遣一百二十九人、一万二千一百七十五分人之八千七百九。
  
    a = [8758, 7236, 8356];
    
    total = sum(a);

mul = 378;
    
    for i in range(len(a)):
        print(mul * a[i]/total, end = ', ');

>>> 
135.9558110882957, 112.3288706365503, 129.715318275154,

a = [8758, 7236, 8356];
    
    total = sum(a);

mul = 378;
    
    for i in range(len(a)):
        res = mul * Fraction(a[i],total);
        numer = res.numerator;
        denom = res.denominator;
        real = numer//denom;
        numer = numer - real * denom;
        print(str(real)+'又'+str(Fraction(numer,denom)), end = ', ');

>>> 
135又11637/12175, 112又4004/12175, 129又8709/12175,

[术曰:各置所禀粟斛斗数,爵次均之,以为列衰,副并而加后来大夫亦五斗,得二十以为法。以五斗乘未并者各自为实。实如法得一斗。]

6、衰分:今有禀粟,大夫、不更、簪裹、上造、公士,凡五人,一十五斗。今有大夫一人后来,亦当禀五斗。仓无粟,欲以衰出之,问各几何?
  答曰:大夫出一斗、四分斗之一。不更出一斗。簪褭出四分斗之三。上造出四分斗之二。公士出四分斗之一。
  
    a = list(range(1,6));
    b = a + [5];
    
    total1 = sum(a);
    total2 = sum(b);

mul = 15;
    
    for i in range(len(a)-1, -1, -1):
        res = mul * (Fraction(a[i],total1)-Fraction(a[i], total2));
        numer = res.numerator;
        denom = res.denominator;
        real = numer//denom;
        if (real != 0):
            numer = numer - real * denom;        
            print(str(real)+'又'+str(Fraction(numer,denom)), end = ', ');
        else:
            print(Fraction(numer,denom),end = ', ');

>>> 
1又1/4, 1又0, 3/4, 1/2, 1/4,

[术曰:置三人,人三;二人,人二,为列衰。副并为法。以五斛乘未并者,各自为实。实如法得一斛。
  返衰术曰:列置衰而令相乘,动者为不动者衰。]
7、衰分:今有禀粟五斛,五人分之,欲令三人得三,二人得二。问各几何?
  答曰:三人,人得一斛一斗五升、十三分升之五。二人,人得七斗六升、十三分升之十二。
>>> 
115又5/13, 115又5/13, 115又5/13, 76又12/13, 76又12/13,

a = [3]*3+[2]*2;
    
    total = sum(a);

mul = 500; #升
    
    for i in range(len(a)):
        res = mul * (Fraction(a[i],total));
        numer = res.numerator;
        denom = res.denominator;
        real = numer//denom;
        if (real != 0):
            numer = numer - real * denom;        
            print(str(real)+'又'+str(Fraction(numer,denom)), end = ', ');
        else:
            print(Fraction(numer,denom),end = ', ');

  
[术曰:置爵数各自为衰,而返衰之,副并为法。以百钱乘未并者各自为实。实如法得一钱。]
8、衰分:今有大夫、不更、簪褭、上造、公士,凡五人,共出百钱。欲令高爵出少,以次渐多,问各几何?
  答曰:大夫出八钱、一百三十七分钱之一百四。不更出一十钱、一百三十七分钱之一百三十。簪褭出一十四钱、一百三十七分钱之八十二。上造出二十一钱、一百三十七分钱之一百二十三。公士出四十三钱、一百三十七分钱之一百九。

>>> 
8又104/137, 10又130/137, 14又82/137, 21又123/137, 43又109/137,

a = list(range(5, 0, -1));

for i in range(len(a)):
        a[i] = Fraction(1,a[i]);
    
    total = sum(a);

mul = 100; 
    
    for i in range(len(a)):
        res = mul * (Fraction(a[i],total));
        numer = res.numerator;
        denom = res.denominator;
        real = numer//denom;
        if (real != 0):
            numer = numer - real * denom;        
            print(str(real)+'又'+str(Fraction(numer,denom)), end = ', ');
        else:
            print(Fraction(numer,denom),end = ', ');

[术曰:以粟率五十、粝米率三十、粝饭率七十五为衰、而返衰之,副并为法。以九升乘未并者各自为实。实如法得一升。]
9、衰分:今有甲持粟三升,乙持粝米三升,丙持粝饭三升。欲令合而分之,问各几何?
  答曰:甲二升、一十分升之七。乙四升、一十分升之五。丙一升、一十分升之八。

>>> 
2又7/10, 4又1/2, 1又4/5,

a = [50, 30, 75];

for i in range(len(a)):
        a[i] = Fraction(1,a[i]);
    
    total = sum(a);

mul = 9; 
    
    for i in range(len(a)):
        res = mul * (Fraction(a[i],total));
        numer = res.numerator;
        denom = res.denominator;
        real = numer//denom;
        if (real != 0):
            numer = numer - real * denom;        
            print(str(real)+'又'+str(Fraction(numer,denom)), end = ', ');
        else:
            print(Fraction(numer,denom),end = ', ');

[术曰:以一斤价数为法,以一斤乘今有钱数为实,实如法得丝数。]
10、衰分:今有丝一斤,价直二百四十。今有钱一千三百二十八,问得丝几何?
  答曰:五斤八两一十二铢、三分铢之四。  

>>> 1328/240
5.533333333333333
>>> 5+8/16+12.75/24/16
5.533203125

[术曰:以一斤铢数为法,以一斤价数,乘七两一十二铢为实。实如法得钱数。]
11、衰分:今有丝一斤价直三百四十三。今有丝七两一十二铢,问得钱几何?
  答曰:一百六十一钱、三十二分钱之二十三。
>>> 343*7.5/16
160.78125
  
[术曰:以一丈寸数为法,以价钱数乘今有缣寸数为实,实如法得钱数。]
12、衰分:今有缣一丈价直一百二十八。今有缣一匹九尺五寸,问得钱几何?
  答曰:六百三十三钱、五分钱之三。
  
>>> 128*4.95
633.6

[术曰:以一匹尺数为法,今有布尺数乘价钱为实,实如法得钱数。]
13、衰分:今有布一匹,价直一百二十五。今有布二丈七尺,问得钱几何?
  答曰:八十四钱、八钱之三。
>>> 125/4*2.7
84.375
  
[术曰:以价直为法,以一匹一丈尺数乘今有钱数为实。实如法得素数。]
14、衰分:今有素一匹一丈,价直六百二十五。今有钱五百,问得素几何?
  答曰:四丈。
>>> 500/(625/5)
4.0  

[术曰:以一十四斤两数为法,以一十斤乘今有丝两数为实,实如法得缣数。]
15、衰分:今有与人丝一十四斤,约得缣一十斤。今与人丝四十五斤八两,问得缣几何?
  答曰:三十二斤八两。
>>> 10/14*45.5
32.5

[术曰:以一斤展十六两为法,以七两乘今有丝两数为实,实如法得耗数。]
16、衰分:今有丝一斤,耗七两。今有丝二十三斤五两,问耗几何?
  答曰:一百六十三两四铢半。

>>> (23+5/16)*7/16*16
163.1875 
>>> 0.1875*24
4.5 

[术曰:置生丝两数,除耗数,馀,以为法。三十斤乘乾丝两数为实。实如法得生丝数。]
17、衰分:今有生丝三十斤,乾之,耗三斤十二两。今有乾丝一十二斤,问生丝几何?
  答曰:一十三斤一十一两十铢、七分铢之二。

>>> 12/(26.25/30)
13.714285714285714
  
[术曰:以亩二百四十步为法,以六升、太半升乘今有田积步为实,实如法得粟数。]
18、衰分:今有田一亩,收粟六升、太半升。今有田一顷二十六亩一百五十九步,问收粟几何?
  答曰:八斛四斗四升、一十二分升之五。
>>> (126*240+159)/240*6.667
844.4588875
  
[术曰:以价钱为法,以一岁三百五十四日乘先取钱数为实,实如法得日数。]
19、衰分:今有取保一岁,价钱二千五百。今先取一千二百,问当作日几何?
  答曰:一百六十九日、二十五分日之二十三。
>>> 1200/(2500/354)
169.92 

[术曰:以月三十日,乘千钱为法。以息三十乘今所贷钱数,又以九日乘之,为实。实如法得一钱。]
20、衰分:今有贷人千钱,月息三十。今有贷人七百五十钱,九日归之,问息几何?
  答曰:六钱、四分钱之三。
>>> 750*(30/1000/30)*9
6.75

//

四:《少广》

[少广:少广术曰:置全步及分母子,以最下分母遍乘诸分子及全步,各以其母除其子,置之于左。命通分者,又以分母遍乘诸分子,及已通者皆通而同之,并之为法。置所求步数,以全步积分乘之为实。实如法而一,得从步。]

[术曰:下有半,是二分之一。以一为二,半为一,并之得三,为法。置田二百四十步,亦以一为二乘之,为实。实如法得从步。]
1、少广:今有田广一步半。求田一亩,问从几何?
  答曰:一百六十步。
>>> 240/1.5
160.0  

[术曰:下有三分,以一为六,半为三,三分之一为二,并之得一十一为法。置田二百四十步,亦以一为六乘之,为实。实如法得从步。]
2、少广:今有田广一步半、三分步之一。求田一亩,问从几何?
  答曰:一百三十步、一十一分步之一十。
  
>>> 240/(1.5+1/3)
130.9090909090909

[术曰:下有四分,以一为一十二,半为六,三分之一为四,四分之一为三,并之得二十五,以为法。置田二百四十步,亦以一为一十二乘之,为实。实如法而一,得从步。]
3、少广:今有田广一步半、三分步之一、四分步之一。求田一亩,问从几何?
  答曰:一百一十五步、五分步之一。
  
>>> 240/(1.5+1/3+1/4)
115.20000000000002

[术曰:下有五分,以一为六十,半为三十,三分之一为二十,四分之一为一十五,五分之一为一十二,并之得一百三十七,以为法。置田二百四十步,亦以一为六十乘之,为实。实如法得从步。]
4、少广:今有田广一步半、三分步之一、四分步之一、五分步之一。求田一亩,问从几何?
  答曰:一百五步、一百三十七分步之一十五。
  
>>> 240/(1.5+1/3+1/4+1/5)
105.1094890510949

[术曰:下有六分,以一为一百二十,半为六十,三分之一为四十,四分之一为三十,五分之一为二十四,六分之一为二十,并之得二百九十四以为法。置田二百四十步,亦以一为一百二十乘之,为实。实如法得从步。]
5、少广:今有田广一步半、三分步之一、四分步之一、五分步之一、六分步之一。求田一亩,问从几何?
  答曰:九十七步、四十九分步之四十七。
  
>>> 240/(1.5+1/3+1/4+1/5+1/6)
97.9591836734694

[术曰:下有七分,以一为四百二十,半为二百一十,三分之一为一百四十,四分之一为一百五,五分之一为八十四,六分之一为七十,七分之一为六十,并之得一千八十九,以为法。置田二百四十步,亦以一为四百二十乘之,为实。实如法得从步。]
6、少广:今有田广一步半、三分步之一、四分步之一、五分步之一、六分步之一、七分步之一。求田一亩,问从几何?
  答曰:九十二步、一百二十一分步之六十八。
  
>>> 
92又68/121,

a = list(range(1, 8));

for i in range(len(a)):
        a[i] = Fraction(1,a[i]);
    
    
    total = sum(a);

mul = 240; 
    
    for i in range(1):
        res = mul * (Fraction(1,total));
        numer = res.numerator;
        denom = res.denominator;
        real = numer//denom;
        if (real != 0):
            numer = numer - real * denom;        
            print(str(real)+'又'+str(Fraction(numer,denom)), end = ', ');
        else:
            print(Fraction(numer,denom),end = ', ');

[术曰:下有八分,以一为八百四十,半为四百二十,三分之一为二百八十,四分之一为二百一十,五分之一为一百六十八,六分之一为一百四十,七分之一为一百二十,八分之一为一百五,并之得二千二百八十三,以为法。置田二百四十步,亦以一为八百四十乘之,为实。实如法得从步。]

7、少广:今有田广一步半、三分步之一、四分步之一、五分步之一、六分步之一、七分步之一、八分步之一。求田一亩,问从几何?
  答曰:八十八步、七百六十一分步之二百三十二。

>>> 
88又232/761,
  
[术曰:下有九分,以一为二千五百二十,半为一千二百六十,三分之一为八百四十,四分之一为六百三十,五分之一为五百四,六分之一为四百二十,七分之一为三百六十,八分之一为三百一十五,九分之一为二百八十,并之得七千一百二十九,以为法。置田二百四十步,亦以一为二千五百二十乘之,为实。实如法得从步]
8、少广:今有田广一步半、三分步之一、四分步之一、五分步之一、六分步之一、七分步之一、八分步之一、九分步之一。求田一亩,问从几何?
  答曰:八十四步、七千一百二十九分步之五千九百六十四。
>>> 
84又5964/7129,  

[术曰:下有一十分,以一为二千五百二十,半为一千二百六十,三分之一为八百四十,四分之一为六百三十,五分之一为五百四,六分之一为四百二十,七分之一为三百六十,八分之一为三百一十五,九分之一为二百八十,十分之一为二百五十二,并之得七千三百八十一,以为法。置田二百四十步,亦以一为二千五百二十乘之,为实。实如法得从步。]
9、少广:今有田广一步半、三分步之一、四分步之一、五分步之一、六分步之一、七分步之一、八分步之一、九分步之一、十分步之一。求田一亩,问从几何?
  答曰:八十一步、七千三百八十一分步之六千九百三十九。
>>> 
81又6939/7381, 
  
[术曰:下有一十一分,以一为二万七千七百二十,半为一万三千八百六十,三分之一为九千二百四十,四分之一为六千九百三十,五分之一为五千五百四十四,六分之一为四千六百二十,七分之一为三千九百六十,八分之一为三千四百六十五,九分之一为三千八十,一十分之一为二千七百七十二,一十一分之一为二千五百二十,并之得八万三千七百一十一,以为法。置田二百四十步,亦以一为二万七千七百二十乘之,为实。实如法得从步。]
10、少广:今有田广一步半、三分步之一、四分步之一、五分步之一、六分步之一、七分步之一、八分步之一、九分步之一、十分步之一、十一分步之一。求田一亩,问从几何?
  答曰:七十九步、八万三千七百一十一分步之三万九千六百三十一。
>>> 
79又39631/83711, 
  
[术曰:下有一十二分,以一为八万三千一百六十,半为四万一千五百八十,三分之一为二万七千七百二十,四分之一为二万七百九十,五分之一为一万六千六百三十二,六分之一为一万三千八百六十,七分之一为一万一千八百八十,八分之一为一万三百九十五,九分之一为九千二百四十,一十分之一为八千三百一十六,十一分之一为七千五百六十,十二分之一为六千九百三十,并之得二十五万八千六十三,以为法。置田二百四十步,亦以一为八万三千一百六十乘之,为实。实如法得从步。]
11、少广:今有田广一步半、三分步之一、四分步之一、五分步之一、六分步之一、七分步之一、八分步之一、九分步之一、十分步之一、十一分步之一、十二分步之一。求田一亩,问从几何?
  答曰:七十七步、八万六千二十一分步之二万九千一百八十三。
>>> 
77又29183/86021,

a = list(range(1, 13));

for i in range(len(a)):
        a[i] = Fraction(1,a[i]);
    
    
    total = sum(a);

mul = 240; 
    
    for i in range(1):
        res = mul * (Fraction(1,total));
        numer = res.numerator;
        denom = res.denominator;
        real = numer//denom;
        if (real != 0):
            numer = numer - real * denom;        
            print(str(real)+'又'+str(Fraction(numer,denom)), end = ', ');
        else:
            print(Fraction(numer,denom),end = ', ');
  

/
[开方术曰:置积为实。借一算步之,超一等。议所得,以一乘所借一算为法,而以除。除已,倍法为定法。其复除。折法而下。复置借算步之如初,以复议一乘之,所得副,以加定法,以除。以所得副从定法。复除折下如前。若开之不尽者为不可开,当以面命之。若实有分者,通分内子为定实。乃开之,讫,开其母报除。若母不可开者,又以母乘定实,乃开之,讫,令如母而一。]

12、少广:今有积五万五千二百二十五步。问为方几何?
  答曰:二百三十五步。
>>> 55225**.5
235.0

13、少广:又有积二万五千二百八十一步。问为方几何?
  答曰:一百五十九步。
>>> 25281**.5
159.0

14、少广:又有积七万一千八百二十四步。问为方几何?
  答曰:二百六十八步。
>>> 71824**0.5
268.0

15、少广:又有积五十六万四千七百五十二步、四分步之一。问为方几何?
  答曰:七百五十一步半。
>>> 564752.25**.5
751.5

16、少广:又有积三十九亿七千二百一十五万六百二十五步。问为方几何?
  答曰:六万三千二十五步。
>>> 3972150625**0.5
63025.0

//
[开圆术曰:置积步数,以十二乘之,以开方除之,即得周。]
注:这里圆周率取的是3倍,精度过低
17、少广:今有积一千五百一十八步、四分步之三。问为圆周几何?
  答曰:一百三十五步。
>>> (3.142*1518.75)**0.5*2
138.1580616540345

18、少广:今有积三百步。问为圆周几何?
  答曰:六十步。
>>> (3.142*300)**0.5*2
61.40358295734867
  
//
[开立方术曰:置积为实。借一算步之,超二等。议所得,以再乘所借一算为法,而除之。除已,三之为定法。复除,折而下。以三乘所得数置中行。复借一算置下行。步之,中超一,下超二等。复置议,以一乘中,再乘下,皆副以加定法。以定法除。除已,倍下、并中从定法。复除,折下如前。开之不尽者,亦为不可开。若积有分者,通分内子为定实。定实乃开之,讫,开其母以报除。若母不可开者,又以母再乘定实,乃开之。讫,令如母而一。]

19、少广:今有积一百八十六万八百六十七尺。问为立方几何?
  答曰:一百二十三尺。
>>> 1860867**(1/3)
122.99999999999997

20、少广:今有积一千九百五十三尺、八分尺之一。问为立方几何?
  答曰:一十二尺半。
>>> 1953.125**(1/3)
12.499999999999998

21、少广:今有积六万三千四百一尺、五百一十二分尺之四百四十七。问为立方几何?
  答曰:三十九尺、八分尺之七。
>>> (63401+447/512)**(1/3)
39.87499999999999

22、少广:又有积一百九十三万七千五百四十一尺、二十七分尺之一十七。问为立方几何?
  答曰:一百二十四尺、太半尺。(太半 = 2/3)
>>> (1937541+17/27)**(1/3)
124.66666666666663

// 
[开立圆术曰:置积尺数,以十六乘之,九而一,所得开立方除之,即丸径。 ]
D = (V * 16 / 9)**(1/3) (精度不够)

V = 3.142/6 *D^3 (由球体积求球直径)

23、少广:今有积四千五百尺。问为立圆径几何?
  答曰:二十尺。
>>> (4500*6/3.142)**(1/3)
20.482636660047774

24、少广:又有积一万六千四百四十八亿六千六百四十三万七千五百尺。问为立圆径几何?
  答曰:一万四千三百尺。
>>> (1644866437500*6/3.142)**(1/3)
14645.085211934153

///

五:《商功》
[术曰:穿地四,为壤五,为坚三,为墟四。以穿地求壤,五之;求坚,三之,皆四而一。以壤求穿,四之;求坚,三之,皆五而一。以坚求穿,四之;求壤,五之,皆三而一。
  城、垣、堤、沟、聢、渠,皆同术。
  术曰:并上下广而半之,以高若深乘之,又以袤乘之,即积尺。]

V = (a + b)/2*h*L

1、商功:今有穿地积一万尺。问为坚、壤各几何?
  答曰:为坚七千五百尺。为壤一万二千五百尺。
>>> 10000*0.75
7500.0
>>> 10000*1.25
12500.0
  

2、商功:今有城下广四丈,上广二丈,高五丈,袤一百二十六丈五尺。问积几何?
  答曰:一百八十九万七千五百尺。
>>> V = lambda a, b, h, L:(a + b)/2*h*L #直台体积
>>> V(40, 20, 50, 1265);
1897500.0

3、商功:今有垣下广三尺,上广二尺,高一丈二尺,袤二十二丈五尺八寸。问积几何?
  答曰:六千七百七十四尺。
>>> V = lambda a, b, h, L:(a + b)/2*h*L #直台体积
>>> V(3, 2, 12, 225.8);
6774.0

4、商功:今有堤下广二丈,上广八尺,高四尺,袤一十二丈七尺。问积几何?
  答曰:七千一百一十二尺。
  冬程人功四百四十四尺。问用徒几何?
  答曰:一十六人、一百一十一分人之二。
  术曰:以积尺为实,程功尺数为法,实如法而一,即用徒人数。
>>> V = lambda a, b, h, L:(a + b)/2*h*L #直台体积
>>> V(20, 8, 4, 127)
7112.0
>>> 7112/444
16.01801801801802

5、商功:今有沟上广一丈五尺,下广一丈,深五尺,袤七丈。问积几何?
  答曰:四千三百七十五尺。
  春程人功七百六十六尺,并出土功五分之一,定功六百一十二尺、五分尺之四。问用徒几何?
  答曰:七人、三千六十四分人之四百二十七。
  术曰:置本人功,去其五分之一,馀为法。以沟积尺为实。实如法而一,得用徒人数。
>>> V = lambda a, b, h, L:(a + b)/2*h*L #直台体积
>>> V(15,10,5,70)
4375.0
>>> 766*0.8
612.8000000000001
>>> 4375/612.8
7.139360313315928

6、商功:今有堑上广一丈六尺三寸,下广一丈,深六尺三寸,袤一十三丈二尺一寸。问积几何?
  答曰:一万九百四十三尺八寸。
  夏程人功八百七十一尺。并出土功五分之一,沙砾水石之功作太半,定功二百三十二尺、一十五分尺之四。问用徒几何?
  答曰:四十七人、三千四百八十四分人之四百九。
  术曰:置本人功,去其出土功五分之一,又去沙砾水石之功太半,馀为法。以堑积尺为实。实如法而一,即用徒人数。

>>> V(16.3, 10, 6.3, 132.1)
10943.824499999999
>>> _/(871*0.8*2/3)
23.558749641216988
>>> _*2
47.117499282433975

8、商功:今有穿渠上广一丈八尺,下广三尺六寸,深一丈八尺,袤五万一千八百二十四尺。问积几何?
  答曰:一千七万四千五百八十五尺六寸。
  秋程人功三百尺,问用徒几何?
  答曰:三万三千五百八十二人功。内少一十四尺四寸。
  一千人先到,问当受袤几何?
  答曰:一百五十四丈三尺二寸、八十一分寸之八。
  术曰:以一人功尺数,乘先到人数为实。并渠上下广而半之,以深乘之为法。实如法得袤尺。

>>> V(18, 3.6, 18, 51824);
10074585.6
>>> _/300
33581.952

>>> 300*1000/((18+3.6)*18/2)
1543.20987654321

9、商功:今有方堡壔方一丈六尺,高一丈五尺。问积几何?
  答曰:三千八百四十尺。
  术曰:方自乘,以高乘之,即积尺。
>>> 16**2*15
3840

10、商功:今有圆堡壔,周四丈八尺,高一丈一尺。问积几何?
  答曰:二千一百一十二尺。
  术曰:周自相乘,以高乘之,十二而一。
>>> 48**2/3.142/4*11
2016.5499681731383

[术曰:上下方相乘,又各自乘,并之,以高乘之,三而一。]
V = (a**2+b**2+a*b)/3*h (棱台体积)

11、商功:今有方亭,下方五丈,上方四丈,高五丈。问积几何?
  答曰:一十万一千六百六十六尺、太半尺。
>>> V_l = lambda a, b, h: (a**2+b**2+a*b)/3*h; #棱台
>>> V_l(50,40,50);
101666.66666666666 

[术曰:上、下周相乘,又各自乘,并之,以高乘之,三十六而一。]
V = 1/3/3.142/4*(C_1**2+C_2**2+C_1*C_2)*h
12、商功:今有圆亭,下周三丈,上周二丈,高一丈。问积几何?
  答曰:五百二十七尺、九分尺之七。
>>> V_c = lambda C_1, C_2, h:1/3/3.142/4*(C_1**2+C_2**2+C_1*C_2)*h; #圆台
>>> V_c(30, 20, 10);
503.9253129641417  

[术曰:下方自乘,以高乘之,三而一。]
V = 1/3 * a**2*h;
13、商功:今有方锥下方二丈七尺,高二丈九尺。问积几何?
  答曰:七千四十七尺。
>>> V_fz = lambda a, h:1/3 * a**2*h; #方锥
>>> V_fz(27, 29);
7047.0  

[术曰:下周自乘,以高乘之,三十六而一。]
V = 1/3/3.142/4 * C**2*h; 
14、商功:今有圆锥下周三丈五尺,高五丈一尺。问积几何?
  答曰:一千七百三十五尺、一十二分尺之五。
>>> V_yz = lambda C, h:1/3/3.142/4 * C**2*h; #圆锥
>>> V_yz(35, 51);
1656.9859961807765 

[术曰:广袤相乘,以高乘之,二而一。] (三棱柱)
15、商功:今有堑堵下广二丈,袤一十八丈六尺,高二丈五尺。问积几何?
  答曰:四万六千五百尺。
>>> 20*18.6*25/2
4650.0  

[术曰:广袤相乘,以高乘之,三而一。] (三棱锥)
16、商功:今有阳马,广五尺,袤七尺,高八尺。问积几何?
  答曰:九十三尺、少半尺。
>>> 5*7*8/3
93.33333333333333
  
[术曰:广袤相乘,以高乘之,六而一。] (四面体)
17、商功:今有鳖臑下广五尺,无袤,上袤四尺,无广,高七尺。问积几何?
  答曰:二十三尺、少半尺。
>>> 5*4*7/6
23.333333333333332
  
[术曰:并三广,以深乘之,又以袤乘之,六而一。]
V = (a + b + c)*h_1 * h_2 / 6
18、商功:今有羡除,下广六尺,上广一丈,深三尺,末广八尺,无深,袤七尺。问积几何?
  答曰:八十四尺。
>>> (6+10+8)*7*3/6
84.0 

[术曰:倍下袤,上袤从之,以广乘之,又以高乘之,六而一。
  刍童、曲池、盘池、冥谷,皆同术。
  术曰:倍上袤,下袤从之,亦倍下袤,上袤从之,各以其广乘之,并,以高若深乘之,皆六而一。其曲池者,并上中、外周而半之,以为上袤;亦并下中、外周而半之,以为下袤。]

#(2倍底边长+上棱长)×底边宽×高÷6
V = (2*a1 +a2) * b1 * h /6

19、商功:今有刍甍,下广三丈,袤四丈,上袤二丈,无广,高一丈。问积几何?
  答曰:五千尺。
>>> V = lambda a1, b1, a2, b2, h:(2*a1 +a2) * b1 * h /6;
>>> V(40,30, 20, 0, 10);
5000.0
  

20、商功:今有刍童,下广二丈,袤三丈,上广三丈,袤四丈,高三丈。问积几何?
  答曰:二万六千五百尺。
>>> V = lambda a1, b1, a2, b2, h:(2*a1 +a2) * b1 * h /6;
>>> V(20,30,30,40,30)+V(30,40,20,30,30);
26500.0

21、商功:今有曲池,上中周二丈,外周四丈,广一丈,下中周一丈四尺,外周二丈四尺,广五尺,深一丈。问积几何?
  答曰:一千八百八十三尺三寸、少半寸。
>>> V = lambda a1, b1, a2, b2, h:(2*a1 +a2) * b1 * h /6;
>>> V(30, 10, 19, 5, 10)+V(19, 5,30, 10, 10)
1883.3333333333335

22、商功:今有盘池,上广六丈,袤八丈,下广四丈,袤六丈,深二丈。问积几何?
  答曰:七万六百六十六尺、太半尺。
  负土往来七十步,其二十步上下棚除。棚除二当平道五,踟蹰之间十加一,载输之间三十步,定一返一百四十步。土笼积一尺六寸,秋程人功行五十九里半。问人到、积尺、用徒各几何?
  答曰:人到二百四尺。用徒三百四十六人、一百五十三分人之六十二。
  术曰:以一笼积尺乘程行步数为实。往来上下,棚除二当平道五。置定往来步数,十加一,及载输之间三十步以为法。除之,所得即一人所到尺。以所到约积尺,即用徒人数。
>>> V = lambda a1, b1, a2, b2, h:(2*a1 +a2) * b1 * h /6;
>>> V(60, 80, 40,60,20)+V(40,60,60,80,20);
70666.66666666666
>>> 50+50+10+30
140 #一个来回折合行路步数
>>> 59.5*300/140*1.6
204.0 #每人每天土方量
>>> 70666.66666666666/204
346.40522875816987

23、商功:今有冥谷上广二丈,袤七丈,下广八尺,袤四丈,深六丈五尺。问积几何?
  答曰:五万二千尺。
  载土往来二百步,载输之间一里,程行五十八里,六人共车,车载三十四尺七寸。问人到积尺及用徒各几何?
  答曰:人到二百一尺、五十分尺之十三。用徒二百五十八人、一万六十三分人之三千七百四十六。
  [术曰:以一车积尺乘程行步数为实。置今往来步数,加载输之间一里,以车六人乘之,为法。除之,所得即一人所到尺。以所到约积尺,即用徒人数。]
>>> V = lambda a1, b1, a2, b2, h:(2*a1 +a2) * b1 * h /6;
>>> V(20,70, 8,40,65)+V(8,40,20,70,65);
52000.0
>>> 58*300/(200+300)*34.7/6
201.26 #人均完成量
>>> 52000/_
258.3722547947928

[委粟术曰:下周自乘,以高乘之,三十六而一。其依垣者,十八而一。其依垣内角者,九而一。
  程粟一斛,积二尺七寸。其米一斛,积一尺六寸、五分寸之一。其菽、答、麻、麦一斛,皆二尺四寸、十分寸之三。]

24、商功:今有委粟平地,下周一十二丈,高二丈。问积及为粟几何?
  答曰:积八千尺。为粟二千九百六十二斛、二十七分斛之二十六。
>>> 120**2/3.142/4/3*20
7638.446849140674 #圆锥体
>>> _/2.7
2829.0543885706197

25、商功:今有委菽依垣,下周三丈,高七尺。问积及为菽各几何?
  答曰:积三百五十尺。为菽一百四十四斛、二百四十三分斛之八。
>>> 30**2/3.142/4/3*2*7
334.1820496499045
>>> _/2.43
137.52347722218292
>>> 30**2/3/4/3*2*7
350.0
>>> _/2.43
144.03292181069958

26、商功:今有委米依垣内角,下周八尺,高五尺。问积及为米几何?
  答曰:积三十五尺、九分尺之五。为米二十一斛,七百二十九分斛之六百九十一。
>>> 8**2/3.142/4/3*4*5
33.94865266284745
>>> _/1.62
20.95595843385645
>>> 1.62/2.7
0.6 #小米更占体积,比重只有米的0.6倍

27、商功:今有穿地,袤一丈六尺,深一丈,上广六尺,为垣积五百七十六尺。问穿地下广几何?
  答曰:三尺、五分尺之三。
  术曰:置垣积尺,四之为实。以深、袤相乘,又三之,为法。所得倍之,减上广,馀即下广。

((16*6)+(x*16)+(x*16*16*6)**0.5)/3*10-576=0  => x = 3.085

9.52234775871075 -11.971837501493928
3.0858301571393634 (2.1186599779874785e-16+3.4600343208549145j)

a = 16;
    b = (16*16*6)**0.5;
    c = (16*6)-576*10/3;

delta = (b**2-4*a*c)**0.5;
    res1 = -b/2/a+delta/2/a;
    res2 = -b/2/a-delta/2/a;

print(res1, res2);        
    print(res1**0.5, res2**0.5);

28、商功:今有仓广三丈,袤四丈五尺,容粟一万斛。问高几何?
  答曰:二丈。
  术曰:置粟一万斛积尺为实。广袤相乘为法。实如法而一,得高尺。
>>> 10000*2.7/30/45
20.0 #尺

29、商功:今有圆困,高一丈三尺三寸、少半寸,容米二千斛。问周几何?
  答曰:五丈四尺。
  术曰:置米积尺,以十二乘之,令高而一,所得,开方除之,即周。
x^2/12 * 13.333 = 2000*1.62  => x = 
  
>>> (2000*1.62/13.333*12)**0.5
54.000675012656515

/

六:《均输》
[均输术曰:令县户数,各如其本行道日数而一,以为衰。甲衰一百二十五,乙、丙衰各九十五,丁衰六十一,副并为法。以赋粟、车数乘未并者,各自为实。实如法得一车。有分者,上下辈之。以二十五斛乘车数,即粟数。]

1、均输:今有均输粟:甲县一万户,行道八日;乙县九千五百户,行道十日;丙县一万二千三百五十户,行道十三日;丁县一万二千二百户,行道二十日,各到输所。凡四县赋,当输二十五万斛,用车一万乘。欲以道里远近,户数多少,衰出之。问粟、车各几何?
  答曰:甲县粟八万三千一百斛,车三千三百二十四乘。乙县粟六万三千一百七十五斛,车二千五百二十七乘。丙县粟六万三千一百七十五斛,车二千五百二十七乘。丁县粟四万五百五十斛,车一千六百二十二乘。

>>> 
甲, 3324又22/47, 83111又33/47, 乙, 2526又28/47, 63164又42/47, 丙, 2526又28/47, 63164又42/47, 丁, 1622又16/47, 40558又24/47,

label = ['甲', '乙', '丙', '丁'];

a = [10000, 9500, 12350, 12200];
    b = [8, 10, 13, 20];

c = [0] * len(a)
    
    for i in range(len(a)):
        c[i] = Fraction(a[i], b[i]);
    
    
    total = sum(c);

mul = 10000;
    mul2 = 250000;
    
    for i in range(len(c)):
        res = mul * (Fraction(c[i],total));
        numer = res.numerator;
        denom = res.denominator;
        real = numer//denom;
        print(label[i], end = ', ');
        if (real != 0):
            numer = numer - real * denom;        
            print(str(real)+'又'+str(Fraction(numer,denom)), end = ', ');
        else:
            print(Fraction(numer,denom),end = ', ');

res = mul2 * (Fraction(c[i],total));
        numer = res.numerator;
        denom = res.denominator;
        real = numer//denom;
        if (real != 0):
            numer = numer - real * denom;        
            print(str(real)+'又'+str(Fraction(numer,denom)), end = ', ');
        else:
            print(Fraction(numer,denom),end = ', ');

2、均输:今有均输卒:甲县一千二百人,薄塞;乙县一千五百五十人,行道一日;丙县一千二百八十人,行道二日;丁县九百九十人,行道三日;戊县一千七百五十人,行道五日。凡五县,赋输卒一月一千二百人。欲以远近、户率,多少衰出之。问县各几何?
  答曰:甲县二百二十九人。乙县二百八十六人。丙县二百二十八人。丁县一百七十一人。戊县二百八十六人。
  术曰:令县卒,各如其居所及行道日数而一,以为衰。甲衰四,乙衰五,丙衰四,丁衰三,戊衰五,副并为法。以人数乘未并者各自为实。实如法而一。有分者,上下辈之。

>>> 
甲, 228又4/7, 乙, 285又5/7, 丙, 228又4/7, 丁, 171又3/7, 戊, 285又5/7,

label = ['甲', '乙', '丙', '丁','戊'];

a = [1200, 1550, 1280, 990, 1750];
    b = [4, 5, 4, 3, 5];

c = [0] * len(a)
    
    for i in range(len(a)):
        c[i] = b[i];
    
    
    total = sum(c);

mul = 1200;
    
    for i in range(len(c)):
        res = mul * (Fraction(c[i],total));
        numer = res.numerator;
        denom = res.denominator;
        real = numer//denom;
        print(label[i], end = ', ');
        if (real != 0):
            numer = numer - real * denom;        
            print(str(real)+'又'+str(Fraction(numer,denom)), end = ', ');
        else:
            print(Fraction(numer,denom),end = ', ');

3、均输:今有均赋粟:甲县二万五百二十户,粟一斛二十钱,自输其县;乙县一万二千三百一十二户,粟一斛一十钱,至输所二百里;丙县七千一百八十二户,粟一斛一十二钱,至输所一百五十里;丁县一万三千三百三十八户,粟一斛一十七钱,至输所二百五十里;戊县五千一百三十户,粟一斛一十三钱,至输所一百五十里。凡五县赋,输粟一万斛。一车载二十五斛,与僦一里一钱。欲以县户输粟,令费劳等。问县各粟几何?
  答曰:甲县三千五百七十一斛、二千八百七十三分斛之五百一十七。乙县二千三百八十斛、二千八百七十三分斛之二千二百六十。丙县一千三百八十八斛、二千八百七十三分斛之二千二百七十六。丁县一千七百一十九斛、二千八百七十三分斛之一千三百一十三。戊县九百三十九斛、二千八百七十三分斛之二千二百五十三。
  术曰:以一里僦价,乘至输所里,以一车二十五斛除之,加一斛粟价,则致一斛之费。各以约其户数,为衰。甲衰一千二十六,乙衰六百八十四,丙衰三百九十九,丁衰四百九十四,戊衰二百七十,副并为法。所赋粟乘未并者,各自为实。实如法得一。

>>> 
[Fraction(1026, 1), Fraction(684, 1), Fraction(399, 1), Fraction(494, 1), Fraction(270, 1)]
甲, 3571又517/2873, 乙, 2380又2260/2873, 丙, 1388又2276/2873, 丁, 1719又101/221, 戊, 939又2253/2873,

label = ['甲', '乙', '丙', '丁','戊'];

a = [20520, 12312, 7182, 13338, 5130]; #户数
    b = [20, 10+200/25, 12+150/25, 17+250/25, 13+150/25]; #单位粟价

c = [0] * len(a)
    
    for i in range(len(a)):
        c[i] = Fraction(a[i],int(b[i]));

print(c);
    
    
    total = sum(c);

mul = 10000;
    
    for i in range(len(c)):
        res = mul * (Fraction(c[i],total));
        numer = res.numerator;
        denom = res.denominator;
        real = numer//denom;
        print(label[i], end = ', ');
        if (real != 0):
            numer = numer - real * denom;        
            print(str(real)+'又'+str(Fraction(numer,denom)), end = ', ');
        else:
            print(Fraction(numer,denom),end = ', ');

4、均输:今有均赋粟,甲县四万二千算,粟一斛二十,自输其县;乙县三万四千二百七十二算,粟一斛一十八,佣价一日一十钱,到输所七十里;丙县一万九千三百二十八算,粟一斛一十六,佣价一日五钱,到输所一百四十里;丁县一万七千七百算,粟一斛一十四,佣价一日五钱,到输所一百七十五里;戊县二万三千四十算,粟一斛一十二,佣价一日五钱,到输所二百一十里;己县一万九千一百三十六算,粟一斛一十,佣价一日五钱,到输所二百八十里。凡六县赋粟六万斛,皆输甲县。六人共车,车载二十五斛,重车日行五十里,空车日行七十里,载输之间各一日。粟有贵贱,佣各别价,以算出钱,令费劳等。问县各粟几何?
  答曰:甲县一万八千九百四十七斛、一百三十三分斛之四十九。乙县一万八百二十七斛、一百三十三分斛之九。丙县七千二百一十八斛、一百三十三分斛之六。丁县六千七百六十六斛、一百三十三分斛之一百二十二。戊县九千二十二斛、一百三十三分斛之七十四。己县七千二百一十八斛、一百三十三分斛之六。
  术曰:以车程行空、重相乘为法,并空、重以乘道里,各自为实,实如法得一日。加载输各一日,而以六人乘之,又以佣价乘之,以二十五斛除之,加一斛粟价,即致一斛之费。各以约其算数为衰,副并为法,以所赋粟乘未并者,各自为实。实如法得一斛。

>>> 
[2100.0, 1200.0, 800.0, 750.0, 1000.0, 799.9999999999999]
甲, 18947又7/19, 乙, 10827又9/133, 丙, 7218又6/133, 丁, 6766又122/133, 戊, 9022又74/133, 己, 7209又3/133,

label = ['甲', '乙', '丙', '丁','戊', '己'];

a = [42000, 34272, 19328, 17700, 23040, 19136]; #户数
    b = [20, 18+60*(1+1.4+2)/25, 16+30*(2+2.8+2)/25, 14+30*(175/70+175/50+2)/25, \
         12+30*(210/70+210/50+2)/25, 10+30*(280/70+280/50+2)/25]; #单位粟价

c = [0] * len(a)
    
    for i in range(len(a)):
        c[i] = a[i]/b[i];

print(c);
    
    
    total = int(sum(c));

mul = 60000;
    
    for i in range(len(c)):
        res = mul * (Fraction(int(c[i]),total));
        numer = res.numerator;
        denom = res.denominator;
        real = numer//denom;
        print(label[i], end = ', ');
        if (real != 0):
            numer = numer - real * denom;        
            print(str(real)+'又'+str(Fraction(numer,denom)), end = ', ');
        else:
            print(Fraction(numer,denom),end = ', ');

5、均输:今有粟七斗,三人分舂之,一人为粝米,一人为稗米,一人为凿米,令米数等。问取粟为米各几何?
  答曰:粝米取粟二斗、一百二十一分斗之一十。稗米取粟二斗、一百二十一分斗之三十八。凿米取粟二斗、一百二十一分斗之七十三。为米各一斗、六百五分斗之一百五十一。
  术曰:列置粝米三十,稗米二十七,凿米二十四,而反衰之,副并为法。以七斗乘未并者,各自为取粟实。实如法得一斗。若求米等者,以本率各乘定所取粟为实,以粟率五十为法,实如法得一斗。

>>> 
[Fraction(1, 30), Fraction(1, 27), Fraction(1, 24)]
甲, 2又10/121, 乙, 2又38/121, 丙, 2又73/121, 
>>> (2+10/121)*30/50
1.2495867768595041

label = ['甲', '乙', '丙', '丁','戊', '己'];

a = [30, 27, 24]; #户数
    b = []; #单位粟价

c = [0] * len(a)
    
    for i in range(len(a)):
        c[i] = Fraction(1, a[i]);

print(c);
    
    
    total = sum(c);

mul = 7;
    
    for i in range(len(c)):
        res = mul * (c[i]/total);
        numer = res.numerator;
        denom = res.denominator;
        real = numer//denom;
        print(label[i], end = ', ');
        if (real != 0):
            numer = numer - real * denom;        
            print(str(real)+'又'+str(Fraction(numer,denom)), end = ', ');
        else:
            print(Fraction(numer,denom),end = ', ');

6、均输:今有人当禀粟二斛。仓无粟,欲与米一、菽二,以当所禀粟。问各几何?
  答曰:米五斗一升、七分升之三。菽一斛二升、七分升之六。
  术曰:置米一、菽二求为粟之数。并之得三、九分之八,以为法。亦置米一、菽二,而以粟二斛乘之,各自为实。实如法得一斛。
>>> Fraction(5,3)+2*Fraction(50,45)
Fraction(35, 9)
>>> 20/Fraction(35, 9)
Fraction(36, 7) (5又1/7, 10又2/7)

7、均输:今有取佣负盐二斛,行一百里,与钱四十。今负盐一斛七斗三升、少半升,行八十里。问与钱几何?
  答曰:二十七钱、十五分钱之十一。
  术曰:置盐二斛升数,以一百里乘之为法。以四十钱乘今负盐升数,又以八十里乘之,为实。实如法得一钱。

>>> 40/(20*100)*(17.3+1/30)*80
27.733333333333338
>>> 27+11/15
27.733333333333334

8、均输:今有负笼重一石一十七斤,行七十六步,五十返。今负笼重一石,行百步,问返几何?
  答曰:四十三返、六十分返之二十三。
  术曰:以今所行步数乘今笼重斤数为法,故笼重斤数乘故步,又以返数乘之,为实。实如法得一返。
>>> 137*76*50/120/100
43.38333333333333
>>> 43+23/60
43.38333333333333

9、均输:今有程传委输,空车日行七十里,重车日行五十里。今载太仓粟输上林,五日三返。问太仓去上林几何?
  答曰:四十八里、十八分里之十一。
  术曰:并空、重里数,以三返乘之,为法。令空、重相乘,又以五日乘之,为实。实如法得一里。
>>> 1/(1/70+1/50)
29.166666666666664
>>> _*2
58.33333333333333
>>> _*5/3
97.22222222222221
>>> _/2
48.61111111111111
>>> 48+11/18
48.611111111111114

10、均输:今有络丝一斤为练丝一十二两,练丝一斤为青丝一斤十二铢。今有青丝一斤,问本络丝几何?
  答曰:一斤四两一十六铢、三十三分铢之十六。
  术曰:以练丝十二两乘青丝一斤一十二铢为法。以青丝一斤铢数乘练丝一斤两数,又以络丝一斤乘之,为实。实如法得一斤。

>>> 
1 斤 4 两 16 铢 0.48484848484852705

def weight(w, t = '斤'):
    from math import floor;
    part_jin = floor(w);
    w -= part_jin;
    w *= 16;
    part_liang = floor(w);
    w -= part_liang;
    w *= 24;
    part_zhu = floor(w);
    part_yushu = w - part_zhu;
    print(part_jin,'斤',part_liang, '两', part_zhu, '铢', part_yushu);

11、均输:今有恶粟二十斗,舂之,得粝米九斗。今欲求稗米十斗,问恶粟几何?
  答曰:二十四斗六升、八十一分升之七十四。
  术曰:置粝米九斗,以九乘之,为法。亦置稗米十斗,以十乘之,又以恶粟二十斗乘之,为实。实如法得一斗。

>>> 10/(9*27/30)*20
24.69135802469136
>>> 24.6+74/810
24.69135802469136

12、均输:今有善行者行一百步,不善行者行六十步。今不善行者先行一百步,善行者追之,问几何步及之?
  答曰:二百五十步。
  术曰:置善行者一百步,减不善行者六十步,馀四十步,以为法。以善行者之一百步,乘不善行者先行一百步,为实。实如法得一步。

>>> 100/40*100
250.0

13、均输:今有不善行者先行一十里,善行者追之一百里,先至不善行者二十里。问善行者几何里及之?
  答曰:三十三里、少半里。
  术曰:置不善行者先行一十里,以善行者先至二十里增之,以为法。以不善行者先行一十里,乘善行者一百里,为实。实如法得一里。
>>> 10/(100-70)*100
33.33333333333333

14、均输:今有兔先走一百步,犬追之二百五十步,不及三十步而止。问犬不止,复行几何步及之?
  答曰:一百七步、七分步之一。
  术曰:置兔先走一百步,以犬走不及三十步减之,馀为法。以不及三十步乘犬追步数为实,实如法得一步。
>>> 100/(250-180)*250-250
107.14285714285717

15、均输:今有人持金十二斤出关。关税之,十分而取一。今关取金二斤,偿钱五千。问金一斤值钱几何?
  答曰:六千二百五十。
  术曰:以一十乘二斤,以十二斤减之,馀为法。以一十乘五千为实。实如法得一钱。
>>> 5000/0.8
6250.0
#计算得1金 = 62.5 钱

16、均输:今有客马日行三百里。客去忘持衣,日已三分之一,主人乃觉。持衣追及与之而还,至家视日四分之三。问主人马不休,日行几何?
  答曰:七百八十里。
  术曰:置四分日之三,除三分日之一,半其馀以为法。副置法,增三分日之一,以三百里乘之,为实。实如法,得主人马一日行。

>>> 
[ 780.]

def tmp2():
    import datastruct.alg as alg;

solve = alg.AlgStringSolve();
    
    coef = [-(0.75-1/3)/2, 100 + (0.75-1/3)/2*300];

result = solve.solvePolyInValueMode(coef);
    print(result);

17、均输:今有金棰,长五尺。斩本一尺,重四斤。斩末一尺,重二斤。问次一尺各重几何?
  答曰:末一尺,重二斤。次一尺,重二斤八两。次一尺,重三斤。次一尺,重三斤八两。次一尺,重四斤。
  术曰:令末重减本重,馀即差率也。又置本重,以四间乘之,为下第一衰。副置,以差率减之,每尺各自为衰。副置下第一衰以为法,以本重四斤遍乘列衰,各自为实。实如法得一斤。

>>> [2, 2.8, 3, 3.8, 4]
[2, 2.8, 3, 3.8, 4] #锤子构造未知

18、均输:今有五人分五钱,令上二人所得与下三人等。问各得几何?
  答曰:甲得一钱、六分钱之二,乙得一钱、六分钱之一,丙得一钱,丁得六分钱之五,戊得六分钱之四。
  术曰:置钱锥行衰,并上二人为九,并下三人为六。六少于九,三。以三均加焉,副并为法。以所分钱乘未并者各自为实。实如法得一钱。

>>> [1.33, 1.16, 1, 0.84, 0.67]
[1.33, 1.16, 1, 0.84, 0.67]

19、均输:今有竹九节,下三节容四升,上四节容三升。问中间二节欲均容各多少?
  答曰:下初,一升、六十六分升之二十九,次一升、六十六分升之二十二,次一升、六十六分升之一十五,次一升、六十六分升之八,次一升、六十六分升之一,次六十六分升之六十,次六十六分升之五十三,次六十六分升之四十六,次六十六分升之三十九。
  术曰:以下三节分四升为下率,以上四节分三升为上率。上下率以少减多,馀为实。置四节、三节,各半之,以减九节,馀为法。实如法得一升,即衰相去也。下率,一升、少半升者,下第二节容也。

3*x + 3 * d - 4 = 0; [12, 12, -16]
4*x + 26 * d - 3 = 0; [12, 78, -9]
=> d = Fraction(-7, 66)

from fractions import Fraction;

x0 = Fraction(95, 66);
    d = Fraction(-7, 66)

res = [];

for i in range(9):
        res.append(x0 + i*d);
        print(x0 + i*d, end = ', ');

print('\n');
    print(sum(res[:3]));
    print(sum(res[-4:]));

>>> 
95/66, 4/3, 27/22, 37/33, 67/66, 10/11, 53/66, 23/33, 13/22,

4
3

20、均输:今有凫起南海,七日至北海;雁起北海,九日至南海。今凫雁俱起。问何日相逢?
  答曰:三日、十六分日之十五。
  术曰:并日数为法,日数相乘为实,实如法得一日。

>>> 1/(Fraction(1, 7)+Fraction(1, 9));
Fraction(63, 16)

21、均输:今有甲发长安,五日至齐;乙发齐,七日至长安。今乙发已先二日,甲乃发长安。问几何日相逢?
  答曰:二日、十二分日之一。
  术曰:并五日、七日以为法。以乙先发二日减七日,馀,以乘甲日数为实。实如法得一日。

>>> 
2又1/12,

def frac(frac):
    #假分数转真分数
    num = frac.numerator;
    dem = frac.denominator;

if num > dem:
        big = num//dem;
        num -= big*dem;
        print(str(big)+'又'+str(Fraction(num,dem)), end = ', ');
    else:
        print(frac,end = ', ');

def tmp():
    from fractions import Fraction;

a = 5;
    b = 7;

a_ = Fraction(1, a);
    b_ = Fraction(1, b);

res = (1-b_*2)/(a_+b_);
    frac(res);

22、均输:今有一人一日为牡瓦三十八枚,一人一日为牝瓦七十六枚。今令一人一日作瓦,牝、牡相半,问成瓦几何?
  答曰:二十五枚、少半枚。
  术曰:并牝、牡为法,牝牡相乘为实,实如法得一枚。

>>> 
25又1/3,

from fractions import Fraction;

a = 38;
    b = 76;

a_ = Fraction(1, a);
    b_ = Fraction(1, b);

res = 1/(a_+b_);
    frac(res);

23、均输:今有一人一日矫矢五十,一人一日羽矢三十,一人一日筈矢十五。今令一人一日自矫、羽、筈,问成矢几何?
  答曰:八矢、少半矢。
  术曰:矫矢五十,用徒一人。羽矢五十,用徒一人、太半人。筈矢五十,用徒三人、少半人。并之,得六人,以为法。以五十矢为实。实如法得一矢。

>>> 
8又1/3,

from fractions import Fraction;

a = 50;
    b = 30;
    c = 15;

a_ = Fraction(1, a);
    b_ = Fraction(1, b);
    c_ = Fraction(1, c);

res = 1/(a_+b_+c_);
    frac(res);

24、均输:今有假田,初假之岁三亩一钱,明年四亩一钱,后年五亩一钱。凡三岁得一百,问田几何?
  答曰:一顷二十七亩、四十七分亩之三十一。
  术曰:置亩数及钱数,令亩数互乘钱数,并以为法。亩数相乘,又以百钱乘之,为实。实如法得一亩。

>>> 
127又31/47,

from fractions import Fraction;

a = 3;
    b = 4;
    c = 5;

a_ = Fraction(1, a);
    b_ = Fraction(1, b);
    c_ = Fraction(1, c);

res = Fraction(100, 3)*3/(a_+b_+c_);
    frac(res);

25、均输:今有程耕,一人一日发七亩,一人一日耕三亩,一人一日耰种五亩。今令一人一日自发、耕、耰种之,问治田几何?
  答曰:一亩一百一十四步、七十一分步之六十六。
  术曰:置发、耕、耰亩数,令互乘人数,并以为法。亩数相乘为实。实如法得一亩。

1又34/71, 
>>> 
354又66/71,

from fractions import Fraction;

a = 7;
    b = 3;
    c = 5;

a_ = Fraction(1, a);
    b_ = Fraction(1, b);
    c_ = Fraction(1, c);

res = 240*1/(a_+b_+c_);
    frac(res);

26、均输:今有池,五渠注之。其一渠开之,少半日一满;次,一日一满;次,二日半一满;次,三日一满;次,五日一满。今皆决之,问几何日满池?
  答曰:七十四分日之十五。
  术曰:各置渠一日满池之数,并以为法。以一日为实。实如法得一日。其一术,列置日数及满数,今日互相乘满,并以为法,日数相乘为实,实如法得一日。

>>> 
15/74,

from fractions import Fraction;

a = [Fraction(1, 3), 1, Fraction(2.5), 3, 5];

a_ = [];

for i in range(len(a)):
        a_.append(Fraction(1, a[i]));

res = 1/(sum(a_));
    frac(res);

27、均输:今有人持米出三关,外关三而取一,中关五而取一,内关七而取一,馀米五斗。问本持米几何?
  答曰:十斗九升、八分升之三。
  术曰:置米五斗。以所税者三之,五之,七之,为实。以馀不税者二、四、六相乘为法。实如法得一斗。

>>> 5/(2/3*4/5*6/7)
10.937499999999998

28、均输:今有人持金出五关,前关二而税一,次关三而税一,次关四而税一,次关五而税一,次关六而税一。并五关所税,适重一斤。问本持金几何?
  答曰:一斤三两四铢、五分铢之四。
  术曰:置一斤,通所税者以乘之为实。亦通其不税者以减所通,馀为法。实如法得一斤。

>>> 
[Fraction(1, 2), Fraction(1, 6), Fraction(1, 12), Fraction(1, 20), Fraction(1, 30)]
5/6,  #一共被收去5/6,因此总共1.2斤
>>> 
5/6, 1 斤 3 两 4 铢 0.799999999999983
    from fractions import Fraction;

a = [Fraction(1, 2), Fraction(1, 3), Fraction(1, 4), Fraction(1, 5), Fraction(1, 6)];

a_ = [];

for i in range(len(a)):
        if (i == 0):
            a_.append(a[i]);
        else:
            a_.append((1-sum(a_))*a[i]);

print(a_);
    
    res = sum(a_);
    frac(res);

//

七:《盈不足》

1、盈不足:今有共买物,人出八,盈三;人出七,不足四。问人数、物价各几何?
  答曰:七人,物价五十三。

8x-3 = 7x+4 => x = 7

>>> 
x: 7 y: 53

from fractions import Fraction;
    a = [[8, -1, -3], [7, -1, 4]]; #两个方程的系数

D_1 = a[0][0];
    D_2 = a[1][0];
    E_1 = a[0][1];
    E_2 = a[1][1];
    F_1 = a[0][2];
    F_2 = a[1][2];
    
    Y = -Fraction(F_1*D_2-F_2*D_1)/Fraction(E_1*D_2-E_2*D_1);
    X = -Fraction(E_1*Y+F_1)/Fraction(D_1);

print('x:', X, 'y:', Y);

2、盈不足:今有共买鸡,人出九,盈十一;人出六,不足十六。问人数、鸡价各几何?
  答曰:九人,鸡价七十。

9x-y-11 = 0;
6x-y+16 = 0;

>>> 
x: 9 y: 70

from fractions import Fraction;
    a = [[9, -1, -11], [6, -1, 16]]; #两个方程的系数

D_1 = a[0][0];
    D_2 = a[1][0];
    E_1 = a[0][1];
    E_2 = a[1][1];
    F_1 = a[0][2];
    F_2 = a[1][2];
    
    Y = -Fraction(F_1*D_2-F_2*D_1)/Fraction(E_1*D_2-E_2*D_1);
    X = -Fraction(E_1*Y+F_1)/Fraction(D_1);

print('x:', X, 'y:', Y);

3、盈不足:今有共买璡,人出半,盈四;人出少半,不足三。问人数、璡价各几何?
  答曰:四十二人,璡价十七。

x: 42 y: 17

from fractions import Fraction;
    a = [['1/2', -1, -4], ['1/3', -1, 3]]; #两个方程的系数

D_1 = Fraction(a[0][0]);
    D_2 = Fraction(a[1][0]);
    E_1 = Fraction(a[0][1]);
    E_2 = Fraction(a[1][1]);
    F_1 = Fraction(a[0][2]);
    F_2 = Fraction(a[1][2]);
    
    Y = -(F_1*D_2-F_2*D_1)/(E_1*D_2-E_2*D_1);
    X = -(E_1*Y+F_1)/(D_1);

print('x:', X, 'y:', Y);

4、盈不足:今有共买牛,七家共出一百九十,不足三百三十;九家共出二百七十,盈三十。问家数、牛价各几何?
  答曰:一百二十六家,牛价三千七百五十。
  盈不足术曰:置所出率,盈、不足各居其下。令维乘所出率,并以为实。并盈、不足为法。实如法而一。有分者,通之。盈不足相与同其买物者,置所出率,以少减多,馀,以约法、实。实为物价,法为人数。
  其一术曰:并盈不足为实。以所出率以少减多,馀为法。实如法得一人。以所出率乘之,减盈、增不足即物价。

>>> 
x: 126 y: 3750

from fractions import Fraction;
    a = [['190/7', -1, 330], ['270/9', -1, -30]]; #两个方程的系数

D_1 = Fraction(a[0][0]);
    D_2 = Fraction(a[1][0]);
    E_1 = Fraction(a[0][1]);
    E_2 = Fraction(a[1][1]);
    F_1 = Fraction(a[0][2]);
    F_2 = Fraction(a[1][2]);
    
    Y = -(F_1*D_2-F_2*D_1)/(E_1*D_2-E_2*D_1);
    X = -(E_1*Y+F_1)/(D_1);

print('x:', X, 'y:', Y);

5、盈不足:今有共买金,人出四百,盈三千四百;人出三百,盈一百。问人数、金价各几何?
  答曰:三十三人。金价九千八百。
>>> 
x: 33 y: 9800

from fractions import Fraction;
    a = [[400, -1, -3400], [300, -1, -100]]; #两个方程的系数

D_1 = Fraction(a[0][0]);
    D_2 = Fraction(a[1][0]);
    E_1 = Fraction(a[0][1]);
    E_2 = Fraction(a[1][1]);
    F_1 = Fraction(a[0][2]);
    F_2 = Fraction(a[1][2]);
    
    Y = -(F_1*D_2-F_2*D_1)/(E_1*D_2-E_2*D_1);
    X = -(E_1*Y+F_1)/(D_1);

print('x:', X, 'y:', Y);

6、盈不足:今有共买羊,人出五,不足四十五;人出七,不足三。问人数、羊价各几何?
  答曰:二十一人,羊价一百五十。
  两盈、两不足术曰:置所出率,盈、不足各居其下。令维乘所出率,以少减多,馀为实。两盈、两不足以少减多,馀为法。实如法而一。有分者通之。两盈、两不足相与同其买物者,置所出率,以少减多,馀,以约法实,实为物价,法为人数。
  其一术曰:置所出率,以少减多,馀为法。两盈、两不足,以少减多,馀为实。实如法而一得人数。以所出率乘之,减盈、增不足,即物价。

>>> 
x: 21 y: 150

from fractions import Fraction;
    a = [[5, -1, 45], [7, -1, 3]]; #两个方程的系数

D_1 = Fraction(a[0][0]);
    D_2 = Fraction(a[1][0]);
    E_1 = Fraction(a[0][1]);
    E_2 = Fraction(a[1][1]);
    F_1 = Fraction(a[0][2]);
    F_2 = Fraction(a[1][2]);
    
    Y = -(F_1*D_2-F_2*D_1)/(E_1*D_2-E_2*D_1);
    X = -(E_1*Y+F_1)/(D_1);

print('x:', X, 'y:', Y);

7、盈不足:今有共买豕,人出一百,盈一百;人出九十,适足。问人数、豕价各几何?
  答曰:一十人,豕价九百。
>>> 
x: 10 y: 900

from fractions import Fraction;
    a = [[100, -1, -100], [90, -1, 0]]; #两个方程的系数

D_1 = Fraction(a[0][0]);
    D_2 = Fraction(a[1][0]);
    E_1 = Fraction(a[0][1]);
    E_2 = Fraction(a[1][1]);
    F_1 = Fraction(a[0][2]);
    F_2 = Fraction(a[1][2]);
    
    Y = -(F_1*D_2-F_2*D_1)/(E_1*D_2-E_2*D_1);
    X = -(E_1*Y+F_1)/(D_1);

print('x:', X, 'y:', Y);

8、盈不足:今有共买犬,人出五,不足九十;人出五十,适足。问人数、犬价各几何?
  答曰:二人,犬价一百。
  盈、适足,不足、适足术曰:以盈及不足之数为实。置所出率,以少减多,馀为法。实如法得一人。其求物价者,以适足乘人数得物价。

>>> 
x: 2 y: 100

from fractions import Fraction;
    a = [[5, -1, 90], [50, -1, 0]]; #两个方程的系数

9、盈不足:今有米在十斗桶中,不知其数。满中添粟而舂之,得米七斗。问故米几何?
  答曰:二斗五升。
  术曰:以盈不足术求之,假令故米二斗,不足二升。令之三斗,有馀二升。

>>> 10-3/0.4
2.5

10、盈不足:今有垣高九尺。瓜生其上,蔓日长七寸。瓠生其下,蔓日长一尺。问几何日相逢?瓜、瓠各长几何?
  答曰:五日、十七分日之五。瓜长三尺七寸、十七分寸之一,瓠长五尺二寸、十七分寸之十六。
  术曰:假令五日,不足五寸。令之六日,有馀一尺二寸。

>>> 9/Fraction('1.7');
Fraction(90, 17)
>>> 
5又5/17,

11、盈不足:今有蒲生一日,长三尺。莞生一日,长一尺。蒲生日自半。莞生日自倍。问几何日而长等?
  答曰:二日、十三分日之六。各长四尺八寸、十三分寸之六。
  术曰:假令二日,不足一尺五寸。令之三日,有馀一尺七寸半。

3*((0.5)^[x] -1)/(0.5-1) = 1*(2^[x]-1)/(2-1) #等比数列和

>>> 
2.585 (迭代解)
>>> 2+6/13
2.4615384615384617

for i in range(1, 10000):
        if (3*(1-(0.5)**(i*0.001))*2) < 2**(i*0.001)-1:
            print(i*0.001);
            break;

12、盈不足:今有垣厚五尺,两鼠对穿。大鼠日一尺,小鼠亦日一尺。大鼠日自倍,小鼠日自半。问几何日相逢?各穿几何?
  答曰:二日、十七分日之二。大鼠穿三尺四寸、十七分寸之十二,小鼠穿一尺五寸、十七分寸之五。
  术曰:假令二日,不足五寸。令之三日,有馀三尺七寸半。

2.154
甲 3.450600482339336 乙 1.5506224366944852
>>> 2+2/17
2.1176470588235294
>>> 3.4+12/170
3.4705882352941178
>>> 1.5+5/170
1.5294117647058822

a0 = 1;
    a1 = 1;

q0 = 2;
    q1 = 0.5;

for i in range(1, 10000):
        s1 = a0*(q0**(i*0.001)-1)/(q0-1);
        s2 = a1*(q1**(i*0.001)-1)/(q1-1);
        if (a0*((q0)**(i*0.001)-1)/(q0-1)) + a1*(q1**(i*0.001)-1)/(q1-1) > 5:
            print(i*0.001);
            break;
    
    print('甲', s1, '乙', s2);

13、盈不足:今有醇酒一斗,直钱五十;行酒一斗,直钱一十。今将钱三十,得酒二斗。问醇、行酒各得几何?
  答曰:醇酒二升半,行酒一斗七升半。
  术曰:假令醇酒五升,行酒一斗五升,有馀一十。令之醇酒二升,行酒一斗八升,不足二。

50x+10y-30=0;
x+y-2=0;

>>> 
x: 1/4 y: 7/4 #单位:斗

from fractions import Fraction;    
    
    a = [[50, 10, -30], [1, 1, -2]]; #两个方程的系数

D_1 = Fraction(a[0][0]);
    D_2 = Fraction(a[1][0]);
    E_1 = Fraction(a[0][1]);
    E_2 = Fraction(a[1][1]);
    F_1 = Fraction(a[0][2]);
    F_2 = Fraction(a[1][2]);
    
    Y = -(F_1*D_2-F_2*D_1)/(E_1*D_2-E_2*D_1);
    X = -(E_1*Y+F_1)/(D_1);

print('x:', X, 'y:', Y);

14、盈不足:今有大器五、小器一容三斛;大器一、小器五容二斛。问大、小器各容几何?
  答曰:大器容二十四分斛之十三,小器容二十四分斛之七。
  术曰:假令大器五斗,小器亦五斗,盈一十斗。令之大器五斗五升,小器二斗五升,不足二斗。
>>> 
x:, 13/24, y:, 7/24,

from fractions import Fraction;    
    
    a = [[5, 1, -3], [1, 5, -2]]; #两个方程的系数

D_1 = Fraction(a[0][0]);
    D_2 = Fraction(a[1][0]);
    E_1 = Fraction(a[0][1]);
    E_2 = Fraction(a[1][1]);
    F_1 = Fraction(a[0][2]);
    F_2 = Fraction(a[1][2]);
    
    Y = -(F_1*D_2-F_2*D_1)/(E_1*D_2-E_2*D_1);
    X = -(E_1*Y+F_1)/(D_1);

print('x:',end =', ');
    frac(X)
    print('y:', end = ', ');
    frac(Y);

15、盈不足:今有漆三得油四,油四和漆五。今有漆三斗,欲令分以易油,还自和馀漆。问出漆、得油、和漆各几何?
  答曰:出漆一斗一升、四分升之一,得油一斗五升,和漆一斗八升,四分升之三。
  术曰:假令出漆九升,不足六升。令之出漆一斗二升,有馀二升。

>>> 90/8
11.25 #出漆
>>> _*1.33
14.9625 #得油
>>> 150/8
18.75 #和漆

17、盈不足:今有玉方一寸,重七两;石方一寸,重六两。今有石立方三寸,中有玉,并重十一斤。问玉、石重各几何?
  答曰:玉一十四寸,重六斤二两。石一十三寸,重四斤十四两。
  术曰:假令皆玉,多十三两。令之皆石,不足十四两。不足为玉,多为石。各以一寸之重乘之,得玉石之积重。

>>> 
x:, 14又0, y:, 13又0,

from fractions import Fraction;    
    
    a = [[7, 6, -11*16], [1, 1, -27]]; #两个方程的系数

D_1 = Fraction(a[0][0]);
    D_2 = Fraction(a[1][0]);
    E_1 = Fraction(a[0][1]);
    E_2 = Fraction(a[1][1]);
    F_1 = Fraction(a[0][2]);
    F_2 = Fraction(a[1][2]);
    
    Y = -(F_1*D_2-F_2*D_1)/(E_1*D_2-E_2*D_1);
    X = -(E_1*Y+F_1)/(D_1);

print('x:',end =', ');
    frac(X)
    print('y:', end = ', ');
    frac(Y);

18、盈不足:今有善田一亩,价三百;恶田七亩,价五百。今并买一顷,价钱一万。问善、恶田各几何?
  答曰:善田一十二亩半,恶田八十七亩半。
  术曰:假令善田二十亩,恶田八十亩,多一千七百一十四钱、七分钱之二。令之善田一十亩,恶田九十亩,不足五百七十一钱、七分钱之三。

>>> 
x:, 12又1/2, y:, 87又1/2,

from fractions import Fraction;    
    
    a = [[300, '500/7', -10000], [1, 1, -100]]; #两个方程的系数

D_1 = Fraction(a[0][0]);
    D_2 = Fraction(a[1][0]);
    E_1 = Fraction(a[0][1]);
    E_2 = Fraction(a[1][1]);
    F_1 = Fraction(a[0][2]);
    F_2 = Fraction(a[1][2]);
    
    Y = -(F_1*D_2-F_2*D_1)/(E_1*D_2-E_2*D_1);
    X = -(E_1*Y+F_1)/(D_1);

print('x:',end =', ');
    frac(X)
    print('y:', end = ', ');
    frac(Y);

19、盈不足:今有黄金九枚,白银一十一枚,称之重适等。交易其一,金轻十三两。问金、银一枚各重几何?
  答曰:金重二斤三两一十八铢,银重一斤十三两六铢。
  术曰:假令黄金三斤,白银二斤、一十一分斤之五,不足四十九,于右行。令之黄金二斤,白银一斤、一十一分斤之七,多一十五于左行。以分母各乘其行内之数,以盈不足维乘所出率,并以为实。并盈不足为法。实如法,得黄金重。分母乘法以除,得银重。约之得分也。

>>> 
x:, 35又3/4, y:, 29又1/4,
2 斤 3 两 18 铢 0.0
1 斤 13 两 6 铢 0.0

from fractions import Fraction;    
    
    a = [[9, -11, 0], [7, -9, 13]]; #两个方程的系数

D_1 = Fraction(a[0][0]);
    D_2 = Fraction(a[1][0]);
    E_1 = Fraction(a[0][1]);
    E_2 = Fraction(a[1][1]);
    F_1 = Fraction(a[0][2]);
    F_2 = Fraction(a[1][2]);
    
    Y = -(F_1*D_2-F_2*D_1)/(E_1*D_2-E_2*D_1);
    X = -(E_1*Y+F_1)/(D_1);

print('x:',end =', ');
    frac(X)
    print('y:', end = ', ');
    frac(Y);

weight(35.75/16);
    weight(29.25/16);

20、盈不足:今有良马与驽马发长安至齐。齐去长安三千里。良马初日行一百九十三里,日增十三里。驽马初日行九十七里,日减半里。良马先至齐,复还迎驽马。问几何日相逢及各行几何?
  答曰:一十五日、一百九十一分日之一百三十五而相逢。良马行四千五百三十四里、一百九十一分里之四十六。驽马行一千四百六十五里、一百九十一分里之一百四十五。
  术曰:假令十五日,不足三百三十七里半。令之十六日,多一百四十里。以盈、不足维乘假令之数,并而为实。并盈不足为法。实如法而一,得日数。不尽者,以等数除之而命分。

>>> 
[-61.90710529088942, 15.507105290889422] #选后一个根
>>> (193+13*d/2)*d
4555.928365409409
>>> (97-0.5*d/2)*d
1444.0716345905914

import datastruct.alg as alg;

#(193+13*d/2)*d + (97-0.5*d/2)*d = 3000*2 #一元二次方程组

solve = alg.AlgStringSolve();
    
    coef = [13/2-0.5/2, \
            193+97,\
            -3000*2];

result = solve.solvePolyInValueMode(coef);
    print(result);

21、盈不足:今有人持钱之蜀,贾利十三。初返归一万四千,次返归一万三千,次返归一万二千,次返归一万一千,后返归一万。凡五返归钱,本利俱尽。问本持钱及利各几何?
  答曰:本三万四百六十八钱、三十七万一千二百九十三分钱之八万四千八百七十六。利二万九千五百三十一钱、三十七万一千二百九十三分钱之二十八万六千四百一十七。
  术曰:假令本钱三万,不足一千七百三十八钱半。令之四万,多三万五千三百九十钱八分。

(((((x*1.13)-14000)*1.13-13000)*1.13-12000)*1.13-11000)*1.13-10000 = 0 #边赚边返模式
  
>>> 
[10000, 11000, 12000, 13000, 14000]
43060.99472663279 #边赚边返模式 本金
---
14000 34658.924041095044
13000 26164.584166437395
12000 17565.980108074255
11000 8849.557522123905
10000 1.0913936421275139e-11

a = [];

for i in range(5):
        a.append(10000+1000*i);

print(a);

sum_ = 0;
    for i in range(len(a)):
        sum_ += a[i]*1.13**i;

print(sum_/1.13**5);

print('---');

b = 43060.99472663279;
    for i in range(5):
        b = b*1.13;
        b -= a[4-i];
        print(a[4-i], b);

//

八:《方程》
[  方程术曰,置上禾三秉,中禾二秉,下禾一秉,实三十九斗,于右方。中、左禾列如右方。以右行上禾遍乘中行而以直除。又乘其次,亦以直除。然以中行中禾不尽者遍乘左行而以直除。左方下禾不尽者,上为法,下为实。实即下禾之实。求中禾,以法乘中行下实,而除下禾之实。馀如中禾秉数而一,即中禾之实。求上禾亦以法乘右行下实,而除下禾、中禾之实。馀如上禾秉数而一,即上禾之实。实皆如法,各得一斗。]

1、方程:今有上禾三秉,中禾二秉,下禾一秉,实三十九斗;上禾二秉,中禾三秉,下禾一秉,实三十四斗;上禾一秉,中禾二秉,下禾三秉,实二十六斗。问上、中、下禾实一秉各几何?
  答曰:上禾一秉,九斗、四分斗之一,中禾一秉,四斗、四分斗之一,下禾一秉,二斗、四分斗之三。

3x+2y+z-39 = 0;
2x+3y+z-34 = 0;
x+2y+3z-26 = 0;

>>> 
x:, 9又1/4, y:, 4又1/4, Z:, 2又3/4,

a = [[3, 2, 1, -39], [2, 3, 1, -34], [1, 2, 3, -26]]; #三元一次方程的系数 D,E,F,G

a1 = D_1 = Fraction(a[0][0]);
        a2 = D_2 = Fraction(a[1][0]);
        a3 = D_3 = Fraction(a[2][0]);
        b1 = E_1 = Fraction(a[0][1]);
        b2 = E_2 = Fraction(a[1][1]);
        b3 = E_3 = Fraction(a[2][1]);
        c1 = F_1 = Fraction(a[0][2]);
        c2 = F_2 = Fraction(a[1][2]);
        c3 = F_3 = Fraction(a[2][2]);
        d1 = G_1 = Fraction(a[0][3]);
        d2 = G_2 = Fraction(a[1][3]);
        d3 = G_3 = Fraction(a[2][3]);

d1 = -d1;
        d2 = -d2;
        d3 = -d3;

# ((c1-b1/b2*c2)/(c2-b2/b3*c3))*(d2-b2/b3*d3-(a2-b2/b3*a3)*x) = d1-b1/b2*d2-(a1-b1/b2*a2)*x ⑾
        #A_1*A_2 - A_1*A_3*x = A_4 - A_5*x
        
        A_1 = (c1-b1/b2*c2)/(c2-b2/b3*c3);
        A_2 = d2-b2/b3*d3;
        A_3 = (a2-b2/b3*a3);
        A_4 = d1-b1/b2*d2;
        A_5 = (a1-b1/b2*a2);

X = (A_1*A_2-A_4)/(A_1*A_3-A_5);

#(c2-b2/b3*c3)Z=d2-b2/b3*d3-(a2-b2/b3*a3)x ⑩
        Z = (d2-b2/b3*d3-(a2-b2/b3*a3)*X)/(c2-b2/b3*c3);

Y = -(a1*X+c1*Z-d1)/b1;

print('x:',end =', ');
        frac(X)
        print('y:', end = ', ');
        frac(Y);
        print('Z:', end = ', ');
        frac(Z);

2、方程:今有上禾七秉,损实一斗,益之下禾二秉,而实一十斗。下禾八秉,益实一斗与上禾二秉,而实一十斗。问上、下禾实一秉各几何?
  答曰:上禾一秉实一斗、五十二分斗之一十八,下禾一秉实五十二分斗之四十一。
  术曰:如方程。损之曰益,益之曰损。损实一斗者,其实过一十斗也。益实一斗者,其实不满一十斗也。

>>> 
x:, 1又9/26, y:, 41/52,

a = [[7, 2, -1-10], [2, 8, 1-10]]; #两个方程的系数

D_1 = Fraction(a[0][0]);
        D_2 = Fraction(a[1][0]);
        E_1 = Fraction(a[0][1]);
        E_2 = Fraction(a[1][1]);
        F_1 = Fraction(a[0][2]);
        F_2 = Fraction(a[1][2]);
        
        Y = -(F_1*D_2-F_2*D_1)/(E_1*D_2-E_2*D_1);
        X = -(E_1*Y+F_1)/(D_1);

print('x:',end =', ');
        frac(X)
        print('y:', end = ', ');
        frac(Y);

3、方程:今有上禾二秉,中禾三秉,下禾四秉,实皆不满斗。上取中,中取下,下取上各一秉而实满斗。问上、中、下禾实一秉各几何?
  答曰:上禾一秉实二十五分斗之九,中禾一秉实二十五分斗之七,下禾一秉实二十五分斗之四。
  术曰:如方程,各置所取,以正负术入之。
  正负术曰:同名相除,异名相益,正无入负之,负无入正之。其异名相除,同名相益,正无入正之,负无入负之。

x < 1/2,  y < 1/3, z < 1/4
2x + y = 1, 3y + z = 1, 4z + x = 1

x + y + z < 13/12
>>> Fraction('1/2')+Fraction('1/3')+Fraction('1/4');
Fraction(13, 12)

>>> 
x:, 9/25, y:, 7/25,

a = [[2, 1, -1], [-1, 12, -3]]; #两个方程的系数

D_1 = Fraction(a[0][0]);
        D_2 = Fraction(a[1][0]);
        E_1 = Fraction(a[0][1]);
        E_2 = Fraction(a[1][1]);
        F_1 = Fraction(a[0][2]);
        F_2 = Fraction(a[1][2]);
        
        Y = -(F_1*D_2-F_2*D_1)/(E_1*D_2-E_2*D_1);
        X = -(E_1*Y+F_1)/(D_1);

print('x:',end =', ');
        frac(X)
        print('y:', end = ', ');
        frac(Y);

4、方程:今有上禾五秉,损实一斗一升,当下禾七秉。上禾七秉,损实二斗五升,当下禾五秉。问上、下禾实一秉各几何?
  答曰:上禾一秉五升,下禾一秉二升。
  术曰:如方程,置上禾五秉正,下禾七秉负,损实一斗一升正。次置上禾七秉正,下禾五秉负,损实二斗五升正。以正负术入之。

>>> 
x:, 1/2, y:, 1/5, #单位:斗

a = [[5, -7, '-1.1'], [7, -5, '-2.5']]; #两个方程的系数

D_1 = Fraction(a[0][0]);
        D_2 = Fraction(a[1][0]);
        E_1 = Fraction(a[0][1]);
        E_2 = Fraction(a[1][1]);
        F_1 = Fraction(a[0][2]);
        F_2 = Fraction(a[1][2]);
        
        Y = -(F_1*D_2-F_2*D_1)/(E_1*D_2-E_2*D_1);
        X = -(E_1*Y+F_1)/(D_1);

print('x:',end =', ');
        frac(X)
        print('y:', end = ', ');
        frac(Y);

5、方程:今有上禾六秉,损实一斗八升,当下禾一十秉。下禾十五秉,损实五升,当上禾五秉。问上、下禾实一秉各几何?
  答曰:上禾一秉实八升,下禾一秉实三升。
  术曰:如方程,置上禾六秉正,下禾一十秉负,损实一斗八升正。次置上禾五秉负,下禾一十五秉正,损实五升正。以正负术人之。

>>> 
x:, 8又0, y:, 3又0,

a = [[6, -10, -18], [-5, 15, -5]]; #两个方程的系数

D_1 = Fraction(a[0][0]);
        D_2 = Fraction(a[1][0]);
        E_1 = Fraction(a[0][1]);
        E_2 = Fraction(a[1][1]);
        F_1 = Fraction(a[0][2]);
        F_2 = Fraction(a[1][2]);
        
        Y = -(F_1*D_2-F_2*D_1)/(E_1*D_2-E_2*D_1);
        X = -(E_1*Y+F_1)/(D_1);

print('x:',end =', ');
        frac(X)
        print('y:', end = ', ');
        frac(Y);

6、方程:今有上禾三秉,益实六斗,当下禾十秉。下禾五秉,益实一斗,当上禾二秉。问上、下禾实一秉各几何?
  答曰:上禾一秉实八斗,下禾一秉实三斗。
  术曰:如方程,置上禾三秉正,下禾一十秉负,益实六斗负。次置上禾二秉负,下禾五秉正,益实一斗负。以正负术入之。

>>> 
x:, 8又0, y:, 3又0,

a = [[3, -10, 6], [-2, 5, 1]]; #两个方程的系数

D_1 = Fraction(a[0][0]);
        D_2 = Fraction(a[1][0]);
        E_1 = Fraction(a[0][1]);
        E_2 = Fraction(a[1][1]);
        F_1 = Fraction(a[0][2]);
        F_2 = Fraction(a[1][2]);
        
        Y = -(F_1*D_2-F_2*D_1)/(E_1*D_2-E_2*D_1);
        X = -(E_1*Y+F_1)/(D_1);

print('x:',end =', ');
        frac(X)
        print('y:', end = ', ');
        frac(Y);

7、方程:今有牛五、羊二,直金十两。牛二、羊五直金八两。问牛羊各直金几何?
  答曰:牛一,直金一两、二十一分两之一十三,羊一,直金二十一分两之二十。
  术曰:如方程。
>>> 
x:, 1又13/21, y:, 20/21,

a = [[5, 2, -10], [2, 5, -8]]; #两个方程的系数

8、方程:今有卖牛二、羊五,以买十三豕,有馀钱一千。卖牛三、豕三,以买九羊,钱适足。卖羊六、豕八,以买五牛,钱不足六百。问牛、羊、豕价各几何?
  答曰:牛价一千二百,羊价五百,豕价三百。
  术曰:如方程,置牛二、羊五正,豕一十三负,馀钱数正;次牛三正,羊九负,豕三正;次牛五负,羊六正,豕八正,不足钱负。以正负术入之。

>>> 
x:, 1200又0, y:, 500又0, Z:, 300又0,

a = [[-2, -5, 13, 1000],[-3, 9, -3, 0], [5, -6, -8, -600]]; #三元一次方程的系数 D,E,F,G

a1 = D_1 = Fraction(a[0][0]);
        a2 = D_2 = Fraction(a[1][0]);
        a3 = D_3 = Fraction(a[2][0]);
        b1 = E_1 = Fraction(a[0][1]);
        b2 = E_2 = Fraction(a[1][1]);
        b3 = E_3 = Fraction(a[2][1]);
        c1 = F_1 = Fraction(a[0][2]);
        c2 = F_2 = Fraction(a[1][2]);
        c3 = F_3 = Fraction(a[2][2]);
        d1 = G_1 = Fraction(a[0][3]);
        d2 = G_2 = Fraction(a[1][3]);
        d3 = G_3 = Fraction(a[2][3]);

d1 = -d1;
        d2 = -d2;
        d3 = -d3;

# ((c1-b1/b2*c2)/(c2-b2/b3*c3))*(d2-b2/b3*d3-(a2-b2/b3*a3)*x) = d1-b1/b2*d2-(a1-b1/b2*a2)*x ⑾
        #A_1*A_2 - A_1*A_3*x = A_4 - A_5*x
        
        A_1 = (c1-b1/b2*c2)/(c2-b2/b3*c3);
        A_2 = d2-b2/b3*d3;
        A_3 = (a2-b2/b3*a3);
        A_4 = d1-b1/b2*d2;
        A_5 = (a1-b1/b2*a2);

X = (A_1*A_2-A_4)/(A_1*A_3-A_5);

#(c2-b2/b3*c3)Z=d2-b2/b3*d3-(a2-b2/b3*a3)x ⑩
        Z = (d2-b2/b3*d3-(a2-b2/b3*a3)*X)/(c2-b2/b3*c3);

Y = -(a1*X+c1*Z-d1)/b1;

print('x:',end =', ');
        frac(X)
        print('y:', end = ', ');
        frac(Y);
        print('Z:', end = ', ');
        frac(Z);

9、方程:今有五雀、六燕,集称之衡,雀俱重,燕俱轻。一雀一燕交而处,衡适平。并燕、雀重一斤。问燕、雀一枚各重几何?
  答曰:雀重一两、一十九分两之十三,燕重一两、一十九分两之五。
  术曰:如方程,交易质之,各重八两。

>>> 
x:, 1又13/19, y:, 1又5/19,

a = [[5, 6, -16], [3, -4, 0]]; #两个方程的系数

D_1 = Fraction(a[0][0]);
        D_2 = Fraction(a[1][0]);
        E_1 = Fraction(a[0][1]);
        E_2 = Fraction(a[1][1]);
        F_1 = Fraction(a[0][2]);
        F_2 = Fraction(a[1][2]);
        
        Y = -(F_1*D_2-F_2*D_1)/(E_1*D_2-E_2*D_1);
        X = -(E_1*Y+F_1)/(D_1);

print('x:',end =', ');
        frac(X)
        print('y:', end = ', ');
        frac(Y);

10、方程:今有甲乙二人持钱不知其数。甲得乙半而钱五十,乙得甲太半而亦钱五十。问甲、乙持钱各几何?
  答曰:甲持三十七钱半,乙持二十五钱。
  术曰:如方程,损益之。

>>> 
x:, 37又1/2, y:, 25又0,

a = [[1, '0.5', -50], ['2/3', 1, -50]]; #两个方程的系数

D_1 = Fraction(a[0][0]);
        D_2 = Fraction(a[1][0]);
        E_1 = Fraction(a[0][1]);
        E_2 = Fraction(a[1][1]);
        F_1 = Fraction(a[0][2]);
        F_2 = Fraction(a[1][2]);
        
        Y = -(F_1*D_2-F_2*D_1)/(E_1*D_2-E_2*D_1);
        X = -(E_1*Y+F_1)/(D_1);

print('x:',end =', ');
        frac(X)
        print('y:', end = ', ');
        frac(Y);

11、方程:今有二马、一牛价过一万,如半马之价。一马、二牛价不满一万,如半牛之价。问牛、马价各几何?
  答曰:马价五千四百五十四钱、一十一分钱之六,牛价一千八百一十八钱、一十一分钱之二。
  术曰:如方程,损益之。

>>> 
x:, 5454又6/11, y:, 1818又2/11,

a = [['1.5', 1, -10000], [1, '2.5', -10000]]; #两个方程的系数

D_1 = Fraction(a[0][0]);
        D_2 = Fraction(a[1][0]);
        E_1 = Fraction(a[0][1]);
        E_2 = Fraction(a[1][1]);
        F_1 = Fraction(a[0][2]);
        F_2 = Fraction(a[1][2]);
        
        Y = -(F_1*D_2-F_2*D_1)/(E_1*D_2-E_2*D_1);
        X = -(E_1*Y+F_1)/(D_1);

print('x:',end =', ');
        frac(X)
        print('y:', end = ', ');
        frac(Y);

2x + y = 10000 + 0.5x;
x + 2y = 10000 - 0.5y;

12、方程:今有武马一匹,中马二匹,下马三匹,皆载四十石至阪,皆不能上。武马借中马一匹,中马借下马一匹,下马借武马一匹,乃皆上。问武、中、下马一匹各力引几何?
  答曰:武马一匹力引二十二石、七分石之六,中马一匹力引十七石、七分石之一,下马一匹力引五石、七分石之五。
  术曰:如方程各置所借,以正负术入之。

x + y = 40;
2y + z = 40; 
3z + x = 40;

>>> 
x:, 22又6/7, y:, 17又1/7, z:, 5又5/7

a = [[1, -6, 80], [1, 1, -40]]; #两个方程的系数

D_1 = Fraction(a[0][0]);
        D_2 = Fraction(a[1][0]);
        E_1 = Fraction(a[0][1]);
        E_2 = Fraction(a[1][1]);
        F_1 = Fraction(a[0][2]);
        F_2 = Fraction(a[1][2]);
        
        Y = -(F_1*D_2-F_2*D_1)/(E_1*D_2-E_2*D_1);
        X = -(E_1*Y+F_1)/(D_1);

print('x:',end =', ');
        frac(X)
        print('y:', end = ', ');
        frac(Y);

13、方程:今有五家共井,甲二绠不足,如乙一绠;乙三绠不足,如丙一绠;丙四绠不足,如丁一绠;丁五绠不足,如戊一绠;戊六绠不足,如甲一绠。如各得所不足一绠,皆逮。问井深、绠长各几何?
  答曰:井深七丈二尺一寸。甲绠长二丈六尺五寸,乙绠长一丈九尺一寸,丙绠长一丈四尺八寸,丁绠长一丈二尺九寸,戊绠长七尺六寸。
  术曰:如方程,以正负术入之。

2x + y = 3y + z = 4z + a = 5a + b = 6b + x = A;

14、方程:今有白禾二步、青禾三步、黄禾四步、黑禾五步,实各不满斗。白取青、黄,青取黄、黑,黄取黑、白,黑取白、青,各一步,而实满斗。问白、青、黄、黑禾实一步各几何?
  答曰:白禾一步实一百一十一分斗之三十三,青禾一步实一百一十一分斗之二十八,黄禾一步实一百一十一分斗之一十七,黑禾一步实一百一十一分斗之一十。
  术曰:如方程,各置所取,以正负术入之。

>>> 
[ 2.97297297  2.52252252  1.53153153  0.9009009 ]

>>> 33/111
0.2972972972972973
>>> 28/111
0.25225225225225223
>>> 17/111
0.15315315315315314
>>> 10/111
0.09009009009009009

a = np.array([[2, 1, 1, 0], [0, 3, 1, 1], [1, 0, 4, 1], [1,1, 0,5]]);
        b = np.array([10, 10, 10, 10]);
        x = np.linalg.solve(a, b);
        print(x);

15、方程:今有甲禾二秉、乙禾三秉、丙禾四秉,重皆过于石。甲二重如乙一,乙三重如丙一,丙四重如甲一。问甲、乙、丙禾一秉各重几何?
  答曰:甲禾一秉重二十三分石之十七,乙禾一秉重二十三分石之十一,丙禾一秉重二十三分石之十。
  术曰:如方程,置重过于石之物为负。以正负术入之。

2x - y = 1;
3y - z = 1;
4z - x = 1;

>>> 
[ 0.73913043  0.47826087  0.43478261]

>>> 17/23
0.7391304347826086
>>> 11/23
0.4782608695652174
>>> 10/23
0.43478260869565216

16、方程:今有令一人、吏五人、从者一十人,食鸡一十;令一十人、吏一人、从者五人,食鸡八;令五人、吏一十人、从者一人,食鸡六。问令、吏、从者食鸡各几何?
  答曰:令一人食一百二十二分鸡之四十五,吏一人食一百二十二分鸡之四十一,从者一人食一百二十二分鸡之九十七。
  术曰:如方程,以正负术入之。

>>> 
x:, 45/122, y:, 41/122, Z:, 97/122,

a = [[1, 5, 10, -10],[10, 1, 5, -8], [5, 10, 1, -6]]; #三元一次方程的系数 D,E,F,G

a1 = D_1 = Fraction(a[0][0]);
        a2 = D_2 = Fraction(a[1][0]);
        a3 = D_3 = Fraction(a[2][0]);
        b1 = E_1 = Fraction(a[0][1]);
        b2 = E_2 = Fraction(a[1][1]);
        b3 = E_3 = Fraction(a[2][1]);
        c1 = F_1 = Fraction(a[0][2]);
        c2 = F_2 = Fraction(a[1][2]);
        c3 = F_3 = Fraction(a[2][2]);
        d1 = G_1 = Fraction(a[0][3]);
        d2 = G_2 = Fraction(a[1][3]);
        d3 = G_3 = Fraction(a[2][3]);

d1 = -d1;
        d2 = -d2;
        d3 = -d3;

# ((c1-b1/b2*c2)/(c2-b2/b3*c3))*(d2-b2/b3*d3-(a2-b2/b3*a3)*x) = d1-b1/b2*d2-(a1-b1/b2*a2)*x ⑾
        #A_1*A_2 - A_1*A_3*x = A_4 - A_5*x
        
        A_1 = (c1-b1/b2*c2)/(c2-b2/b3*c3);
        A_2 = d2-b2/b3*d3;
        A_3 = (a2-b2/b3*a3);
        A_4 = d1-b1/b2*d2;
        A_5 = (a1-b1/b2*a2);

X = (A_1*A_2-A_4)/(A_1*A_3-A_5);

#(c2-b2/b3*c3)Z=d2-b2/b3*d3-(a2-b2/b3*a3)x ⑩
        Z = (d2-b2/b3*d3-(a2-b2/b3*a3)*X)/(c2-b2/b3*c3);

Y = -(a1*X+c1*Z-d1)/b1;

print('x:',end =', ');
        frac(X)
        print('y:', end = ', ');
        frac(Y);
        print('Z:', end = ', ');
        frac(Z);

17、方程:今有五羊、四犬、三鸡、二兔,直钱一千四百九十六;四羊、二犬、六鸡、三兔直钱一千一百七十五;三羊、一犬、七鸡、五兔,直钱九百五十八;二羊、三犬、五鸡、一兔,直钱八百六十一。问羊、犬、鸡、兔价各几何?
  答曰:羊价一百七十七,犬价一百二十一,鸡价二十三,兔价二十九。
  术曰:如方程,以正负术入之。

>>> 
[ 177.  121.   23.   29.]

a = np.array([[5, 4, 3, 2], [4,2, 6,3], [3, 1, 7, 5],[2, 3, 5, 1]]);
        b = np.array([1496, 1175, 958, 861]);
        x = np.linalg.solve(a, b);
        print(x);

18、方程:今有麻九斗、麦七斗、菽三斗、答二斗、黍五斗,直钱一百四十;麻七斗、麦六斗、菽四斗、答五斗、黍三斗,直钱一百二十八;麻三斗、麦五斗、菽七斗、答六斗、黍四斗,直钱一百一十六;麻二斗、麦五斗、菽三斗、答九斗、黍四斗,直钱一百一十二;麻一斗、麦三斗、菽二斗、答八斗、黍五斗,直钱九十五。问一斗直几何?
  答曰:麻一斗七钱,麦一斗四钱,菽一斗三钱,答一斗五钱,黍一斗六钱。
  术曰:如方程,以正负术入之。
        
>>> 
[ 7.  4.  3.  5.  6.]

a = np.array([[9, 7, 3, 2, 5], [7,6,4,5,3], [3,5,7,6,4],[2, 5, 3, 9, 4],[1,3,2,8,5]]);
        b = np.array([140, 128, 116 ,112, 95]);
        x = np.linalg.solve(a, b);
        print(x);

//

def FangCheng(): #方程
    choose = 4;

if (choose == 1):
        import datastruct.alg as alg;

#(193+13*d/2)*d + (97-0.5d/2)*d = 3000*2

solve = alg.AlgStringSolve();
        
        coef = [13/2-0.5/2, \
                193+97,\
                -3000*2];

result = solve.solvePolyInValueMode(coef);
        print(result);

if (choose == 2):         
    
        a = [[1, -6, 80], [1, 1, -40]]; #两个方程的系数

D_1 = Fraction(a[0][0]);
        D_2 = Fraction(a[1][0]);
        E_1 = Fraction(a[0][1]);
        E_2 = Fraction(a[1][1]);
        F_1 = Fraction(a[0][2]);
        F_2 = Fraction(a[1][2]);
        
        Y = -(F_1*D_2-F_2*D_1)/(E_1*D_2-E_2*D_1);
        X = -(E_1*Y+F_1)/(D_1);

print('x:',end =', ');
        frac(X)
        print('y:', end = ', ');
        frac(Y);

if (choose == 3):
            
    
        a = [[1, 5, 10, -10],[10, 1, 5, -8], [5, 10, 1, -6]]; #三元一次方程的系数 D,E,F,G

a1 = D_1 = Fraction(a[0][0]);
        a2 = D_2 = Fraction(a[1][0]);
        a3 = D_3 = Fraction(a[2][0]);
        b1 = E_1 = Fraction(a[0][1]);
        b2 = E_2 = Fraction(a[1][1]);
        b3 = E_3 = Fraction(a[2][1]);
        c1 = F_1 = Fraction(a[0][2]);
        c2 = F_2 = Fraction(a[1][2]);
        c3 = F_3 = Fraction(a[2][2]);
        d1 = G_1 = Fraction(a[0][3]);
        d2 = G_2 = Fraction(a[1][3]);
        d3 = G_3 = Fraction(a[2][3]);

d1 = -d1;
        d2 = -d2;
        d3 = -d3;

# ((c1-b1/b2*c2)/(c2-b2/b3*c3))*(d2-b2/b3*d3-(a2-b2/b3*a3)*x) = d1-b1/b2*d2-(a1-b1/b2*a2)*x ⑾
        #A_1*A_2 - A_1*A_3*x = A_4 - A_5*x
        
        A_1 = (c1-b1/b2*c2)/(c2-b2/b3*c3);
        A_2 = d2-b2/b3*d3;
        A_3 = (a2-b2/b3*a3);
        A_4 = d1-b1/b2*d2;
        A_5 = (a1-b1/b2*a2);

X = (A_1*A_2-A_4)/(A_1*A_3-A_5);

#(c2-b2/b3*c3)Z=d2-b2/b3*d3-(a2-b2/b3*a3)x ⑩
        Z = (d2-b2/b3*d3-(a2-b2/b3*a3)*X)/(c2-b2/b3*c3);

Y = -(a1*X+c1*Z-d1)/b1;

print('x:',end =', ');
        frac(X)
        print('y:', end = ', ');
        frac(Y);
        print('Z:', end = ', ');
        frac(Z);

if (choose == 4):
        
        a = np.array([[9, 7, 3, 2, 5], [7,6,4,5,3], [3,5,7,6,4],[2, 5, 3, 9, 4],[1,3,2,8,5]]);
        b = np.array([140, 128, 116 ,112, 95]);
        x = np.linalg.solve(a, b);
        print(x);

/

九:《勾股》

[勾股术曰:勾股各自乘,并,而开方除之,即弦。
  又股自乘,以减弦自乘,其馀开方除之,即勾。
  又勾自乘,以减弦自乘,其馀开方除之,即股。]

1、勾股:今有勾三尺,股四尺,问为弦几何?
  答曰:五尺。

>>> 
5.0

def gougu(a, b, t = 1):
    if (t == 1):
        print((a**2+b**2)**0.5);
    else:
        print((a**2-b**2)**0.5);

2、勾股:今有弦五尺,勾三尺,问为股几何?
  答曰:四尺。

>>> 
4.0

3、勾股:今有股四尺,弦五尺,问为勾几何?
  答曰:三尺。

>>> 
3.0

4、勾股:今有圆材径二尺五寸,欲为方版,令厚七寸。问广几何?
  答曰:二尺四寸。
  术曰:令径二尺五寸自乘,以七寸自乘减之,其馀开方除之,即广。

#这个问题的意思是要扛着具有厚度的方板从圆孔中通过,钢板最大的边长
>>> 25**2-7
618
>>> _**0.5
24.859605789312106

>>> (25**2-3.5**2)**0.5
24.753787588973125

5、勾股:今有木长二丈,围之三尺。葛生其下,缠木七周,上与木齐。问葛长几何?
  答曰:二丈九尺。
  术曰:以七周乘三尺为股,木长为勾,为之求弦。弦者,葛之长。

>>> 
29.0

gougu(20,7*3);

6、勾股:今有池方一丈,葭生其中央,出水一尺。引葭赴岸,适与岸齐。问水深、葭长各几何?
  答曰:水深一丈二尺;葭长一丈三尺。
  术曰:半池方自乘,以出水一尺自乘,减之,馀,倍出水除之,即得水深。加出水数,得葭长。

5**2 + x ** 2 = (x+1)**2 => 2x = 24 -> x=12

7、勾股:今有立木,系索其末,委地三尺。引索却行,去本八尺而索尽。问索长几何?
  答曰:一丈二尺、六分尺之一。
  术曰:以去本自乘,令如委数而一,所得,加委地数而半之,即索长。

#立柱高
(x+3)**2 = x**2 + 8**2 => 6x+9=64

>>> 55/6
9.166666666666666
>>> _+3
12.166666666666666

8、勾股:今有垣高一丈。倚木于垣,上与垣齐。引木却行一尺,其木至地。问木几何?
  答曰:五丈五寸。
  术曰:以垣高十尺自乘,如却行尺数而一,所得,以加却行尺数而半之,即木长数。

#木长为x
(x-1)**2+10**2 = x**2 =>2x=101 x = 50.5 (单位:尺)

9、勾股:今有圆材,埋在壁中,不知大小。以鐻鐻之,深一寸,鐻道长一尺。问径几何?
  答曰:材径二尺六寸。
  术曰:半鐻道自乘,如深寸而一,以深寸增之,即材径。

#半径长为R
R**2 = (R-0.1)**2 + (0.5)**2 =>0.26 = 0.2R => R = 1.3 (单位:尺)
>>> 0.26/0.2
1.3
>>> _*2
2.6

10、勾股:今有开门去阃一尺,不合二寸。问门广几何?
  答曰:一丈一寸。
  术曰:以去阃一尺自乘,所得,以不合二寸半之而一,所得,增不合之半,即得门广。

#这个门是双扇门,半扇长度为x
x**2 = (x-0.1)**2 + 1**2 => 0.2x = 1.01 => x = 5.05 (单位:尺)

>>> 1.01/0.2
5.05
>>> _*2
10.1

11、勾股:今有户高多于广六尺八寸,两隅相去适一丈。问户高、广各几何?
  答曰:广二尺八寸;高九尺六寸。
  术曰:令一丈自乘为实。半相多,令自乘,倍之,减实,半其馀。以开方除之,所得,减相多之半,即户广。加相多之半,即户高。

>>> 
[-9.6, 2.8000000000000003]
>>> 2.8+6.8
9.6

solve = alg.AlgStringSolve();
        
        coef = [2, \
                13.6,\
                6.8**2-100];

result = solve.solvePolyInValueMode(coef);
        print(result);

12、勾股:今有户不知高广,竿不知长短。横之不出四尺,从之不出二尺,邪之适出。问户高、广、袤各几何?
  答曰:广六尺,高八尺,袤一丈。
  术曰:从、横不出相乘,倍,而开方除之。所得加从不出即户广,加横不出即户高,两不出加之,得户袤。

w = x - 4
h = x - 2
w**2 + h**2 = x**2

>>> 
[2.0, 10.0]

>>> 10-4
6
>>> 10-2
8

solve = alg.AlgStringSolve();
        
        coef = [1, \
                -8-4,\
                16+4];

result = solve.solvePolyInValueMode(coef);
        print(result);

13、勾股:今有竹高一丈,末折抵地,去本三尺。问折者高几何?
  答曰:四尺、二十分尺之十一。
  术曰:以去本自乘,令如高而一,所得,以减竹高而半其馀,即折者之高也。

gougu(10, 3, 0);
>>> 
9.539392014169456
>>> 10-9.539392014169456
0.46060798583054385

14、勾股:今有二人同所立。甲行率七,乙行率三。乙东行。甲南行十步而邪东北与乙会。问甲乙行各几何?
  答曰:乙东行一十步半;甲邪行一十四步半及之。
  术曰:令七自乘,三亦自乘,并而半之,以为甲邪行率。邪行率减于七自乘,馀为南行率。以三乘七为乙东行率。置南行十步,以甲邪行率乘之,副置十步,以乙东行率乘之,各自为实。实如南行率而一,各得行数。

#行率x
(3x)**2 + 10**2 = (7x-10)**2

>>> 
[0.0, 3.5]
>>> 3.5*7
24.5
>>> 3.5*3
10.5
>>>

solve = alg.AlgStringSolve();
        
        coef = [9-49, \
                140,\
                0];

result = solve.solvePolyInValueMode(coef);
        print(result);

15、勾股:今有勾五步,股十二步。问勾中容方几何?
  答曰:方三步、十七分步之九。
  术曰:并勾、股为法,勾股相乘为实,实如法而一,得方一步。

>>> 12/3.4
3.5294117647058822
>>> 3+9/17
3.5294117647058822

x/(5-x) = 12/5  x = 12/3.4

16、勾股:今有勾八步,股十五步。问勾中容圆,径几何?
  答曰:六步。
  术曰:八步为勾,十五步为股,为之求弦。三位并之为法,以勾乘股,倍之为实。实如法得径一步。

8-R + 15 - R = (8**2+15**2)**0.5 = > R = 3

>>> (8**2+15**2)**0.5
17.0
>>> 23-17
6

17、勾股:今有邑方二百步,各中开门。出东门十五步有木。问出南门几何步而见木?
  答曰:六百六十六步、太半步。
  术曰:出东门步数为法,半邑方自乘为实,实如法得一步。

>>> 115/15*100-100
666.6666666666667

15/100 = (15+100)/(100+x) = > x = 666.6666666666667

18、勾股:今有邑,东西七里,南北九里,各中开门。出东门十五里有木。问出南门几何步而见木?
  答曰:三百一十五步。
  术曰:东门南至隅步数,以乘南门东至隅步数为实。以木去门步数为法。实如法而一。

>>> 1.0499999999999998*300
314.99999999999994

a = 7;
    b = 9;
    al = 15;

x = (al + a/2)/(al/b*2) - b/2
    print(x);

19、勾股:今有邑方不知大小,各中开门。出北门三十步有木,出西门七百五十步见木。问邑方几何?
  答曰:一里。
  术曰:令两出门步数相乘,因而四之,为实。开方除之,即得邑方。

(30 + x/2) / (30 / x * 2) - x/2 = 750 => (30 + 0.5x)*x - 30x = 750*60

>>> 
[-300.0, 300.0] (单位:步)

import datastruct.alg as alg;

#(193+13*d/2)*d + (97-0.5d/2)*d = 3000*2

solve = alg.AlgStringSolve();
        
        coef = [0.5, \
                0,\
                -750*60];

result = solve.solvePolyInValueMode(coef);
        print(result);

20、勾股:今有邑方不知大小,各中开门。出北门二十步有木。出南门十四步,折而西行一千七百七十五步见木。问邑方几何?
  答曰:二百五十步。
  术曰:以出北门步数乘西行步数,倍之,为实。并出南门步数为从法,开方除之,即邑方。

20/(x/2)  = (20+14+x)/1775 => (34+x)*x = 40 * 1775

>>> 
[-284.0, 250.0]

solve = alg.AlgStringSolve();
        
        coef = [1, \
                34,\
                -40*1775];

result = solve.solvePolyInValueMode(coef);
        print(result);

21、勾股:今有邑方十里,各中开门。甲乙俱从邑中央而出。乙东出;甲南出,出门不知步数,邪向东北磨邑,适与乙会。率甲行五,乙行三。问甲、乙行各几何?
  答曰:甲出南门八百步,邪东北行四千八百八十七步半,及乙。乙东行四千三百一十二步半。
  术曰:令五自乘,三亦自乘,并而半之,为邪行率。邪行率减于五自乘者,馀,为南行率。以三乘五,为乙东行率。置邑方半之,以南行率乘之,如东行率而一,即得出南门步数。以增邑方半,即南行。置南行步求弦者,以邪行率乘之,求东者以东行率乘之,各自为实。实如南行率得一步。

#x为出南门距离, y为乙所行程
x/5 = (x+5)/y => xy = 5*(x+5)
(x+5)**2 + y**2 = (5/3y - x - 5)**2 单位:里

>>> 
step1:  ['(1)*x*y', '(-5)*x', '(-25)']
step1:  ['(0)', '(0)', '(0)', '(-1.777778)*y^[2]', '(3.333334)*x^[1]*y^[1]', '(16.666666)*y^[1]']

-16/9y**2+10/3*x*y+50/3y = 0; => y = (10/3x + 50/3)*9/16 => y = 15/8x+75/8

import datastruct.alg as alg;

expr = alg.AlgExpressionCalc();
    poly_1 = expr.strPolyFormat(['xy','-5x', '-25']);
    t_1 = expr.strPolyFormat(['x', '5']);
    t_2 = expr.strPolyFormat(['y']);
    t_3 = expr.strPolyFormat(['5/3y', '-x', '-5']);
    poly_2 = expr.strsub(expr.stradd(expr.strpow_n(t_1, 2), expr.strpow_n(t_2, 2)),\
                         expr.strpow_n(t_3, 2));
    poly_2 = expr.strPolyCombine(poly_2);

print('step1: ', poly_1);  
    print('step1: ', poly_2);

>>> 
[-5.0, 2.6666666666666665] #x = 8/3里
y = 15/8x+75/8 = 15/8*8/3+75/8 = 14又3/8

>>> 14.375*300
4312.5
>>> 8/3*300
800.0
>>> 4312.5/3*5
7187.5

solve = alg.AlgStringSolve();
        
        coef = [15/8, \
                75/8-5,\
                -25];

result = solve.solvePolyInValueMode(coef);
        print(result);

22、勾股:有木去人不知远近。立四表,相去各一丈,令左两表与所望参相直。从后右表望之,入前右表三寸。问木去人几何?
  答曰:三十三丈三尺三寸、少半寸。
  术曰:令一丈自乘为实,以三寸为法,实如法而一。

#此题的图可在网上搜得,四表围成一个边长为1丈的正方形,显示刻度,是平放在地上的
(0.03/1) = (1-0.03)/x => x =

>>> 0.97/0.03
32.333333333333336
>>> _+1
33.333333333333336

23、勾股:有山居木西,不知其高。山去木五十三里,木高九丈五尺。人立木东三里,望木末适与山峰斜平。人目高七尺。问山高几何?
  答曰:一百六十四丈九尺六寸、太半寸。
  术曰:置木高减人目高七尺,馀,以乘五十三里为实。以人去木三里为法。实如法而一,所得,加木高即山高。

3/(9.5-0.7) = 53/(x-9.5) => x = 164.967

>>> 53/3*8.8+9.5
164.9666666666667

24、勾股:今有井径五尺,不知其深。立五尺木于井上,从木末望水岸,入径四寸。问井深几何?
  答曰:五丈七尺五寸。
  术曰:置井径五尺,以入径四寸减之,馀,以乘立木五尺为实。以入径四寸为法。实如法得一寸。

50/4 = 46/x => x = 575寸 
>>> 50*46/4
575.0

参见 http://blog.csdn.net/mwsister/article/details/51513174

本节到此结束,欲知后事如何,请看下回分解。

[生存志] 第117节 九章算术均徭赋相关推荐

  1. [生存志] 第101节 九歌道尽楚芳华

            九歌道尽楚芳华 司马迁在<史记卷七十八.春申君列传第十八>中写了一个"春申君"的门客"珠炫赵客"的故事,『赵平原君使人於春申君,春申 ...

  2. JAVASCRIPT遇到《九章算术》-《九章算术注》序

    本章对应B站视频链接https://www.bilibili.com/video/BV1Zf4y1T79i/https://www.bilibili.com/video/BV1Zf4y1T79i/ 小 ...

  3. c语言使用循环编写勾股数,刘徽《九章算术》中的勾股数

    若A.B.C为满足A2+B2=C2的正整数.我国古代数学书<周髀算经>曾经提到"勾广三,股修四,径偶五"这三个边都是正整数的直角三角形.在公元263年时,我国数学家:刘 ...

  4. 《九章算术》中更相减损术----求最大公约数

    更相减损法:也叫更相减损术,是出自<九章算术>的一种求最大公约数的算法,它原本是为约分而设计的,但它适用于任何需要求最大公约数的场合. #include<stdio.h> in ...

  5. 九章算术 九:《勾股》

    九:<勾股> 1.勾股:今有勾三尺,股四尺,问为弦几何? 答曰:五尺. 2.勾股:今有弦五尺,勾三尺,问为股几何? 答曰:四尺. 3.勾股:今有股四尺,弦五尺,问为勾几何? 答曰:三尺.勾 ...

  6. 《九章算术》中记载的方程是如何算的?

    <九章算术>是我国古代一部重要的算学书籍,成书于公元一世纪左右,原作者是谁已经不可考,西汉时,张苍和耿寿昌曾对其做过整理. 到了三国时期,数学家刘徽又为其作了注,也是如今通行的版本. &l ...

  7. 九章算术更相减损术的的c语言实现

    "关于约分问题,实质是如何求分子,分母最大公约数的问题.<九章算术>中介绍了这个方法,叫做"更相减损术",即"可半者半之,不可半者,副置分母.子之数 ...

  8. [生存志] 第56节 李聃函谷授道德经

            李聃函谷授道德经 季札出身吴国王室,受封于江苏镇江丹阳的"延陵",躬耕于江苏常州武进的"舜山",自幼父兄喜爱,成年国人爱戴,广交贤士,名重天下. ...

  9. [生存志] 第102节 屈原既放赋离骚

            屈原既放赋离骚                  屈原拍完了"上帝"."天神"."土地"的马屁,接着奉承生育神和山水神.&q ...

最新文章

  1. UE5蓝图初学课程 Unreal Engine 5: Blueprints for Beginners
  2. nyoj 284 坦克大战 (优先队列)
  3. 户籍改革更进一步!我国将推动户籍准入年限同城化累计互认
  4. java后台开发实习--第一次面试
  5. pycharm中导入包失败,如何设置外部模块的路径
  6. 艾伟_转载:WPF/Silverlight陷阱:XAML自定义控件的嵌套内容无法通过名称访问
  7. python时间序列异常值查找_(No.38)时间序列异常点检测算法
  8. 企业管理器开启和关闭数据库时出现Error Messsage
  9. hdu4190 简单的二分法
  10. 【进阶3-4期】深度解析bind原理、使用场景及模拟实现
  11. 桌面支持--outlook会议邀请(选择可选参加的领导)
  12. 电工在计算机方面的应用,计算机在电工技术实验的应用
  13. 动态加载listvi
  14. Android虚拟机的安装
  15. Python编写汽车类
  16. 苹果cms如何在虚拟主机上设置伪静态
  17. 俄勒冈大学计算机科学专业,俄勒冈大学计算机与信息科学详解 热门专业还等什么...
  18. 【网易编程题】小易魔法王国采购魔法神器
  19. 5G+Wi-Fi 6“双管齐下”,“双千兆”普及时代还远吗?
  20. 4核处理器_Intel加速淘汰14nm处理器 4核6W奔腾/赛扬退役

热门文章

  1. C语言单元测试embUnit入门学习
  2. 微信小程序 滚动列表(无限滚动)
  3. QT开发环境的建立以及QTE4.6.3、tslib1.4的移植过程
  4. STP/RSTP/MSTP的概念及特点
  5. Mobx和Mobx-react:集中式状态管理
  6. 何金龙 mysql_办innodb
  7. keda.#P1097. 不要62
  8. 干货 | 提升50分,Trip.com 机票基于 PageSpeed 的前端性能优化实践
  9. DeepARG——一种基于深度学习更加准确预测ARG的方法
  10. linux命令行连接wifi RTL810xE PCI Express Fast Ethernet Controller 网卡