zoukankan      html  css  js  c++  java
  • 关于大衍求一术的一个延拓

    今天是一个明朗的日子,心情闲暇,于是,研究了一下我国的算术,我国的算术其实是非常博大精深的,只是由于某些偶然原因,我国算术没能发展起来,否则,现代算术中心必在东方之华夏,在我的印记中,我们中学以前所学的算术思想,总体都体现了东方之华夏的风格.

    原载<<孙子算经>>卷下第二十六题

    今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?

    通俗来讲,该问题的意思是:有一些物品,不知道有多少个,只知道将它们三个三个地数,会剩下两个,五个五个地数,会剩下三个,七个七个地数,也会剩下两个,这些物品的数量至少是多少个?

    我们可以用孙子定理来解决该问题,孙子定理是我国古代求解一次同余式组的方法,用现代数学语言来说明的话,即:设m1,m2,m3,...,mk,...,mn,是两两互素的正整数,那么,对于任意整数,a1,a2,a3,...,ak,...,an,一次同余方程组:

    x≡a1(mod m1)
    x≡a2(mod m2)
    x≡a3(mod m3)
    ...
    x≡ak(mod mk)
    ...
    x≡an(mod mn)

    其解为,x≡M1.M1^(-1).a1+M2.M2^(-1).a2+M3.M3^(-1).a3+...+Mk.Mk^(-1).ak...+Mn.Mn^(-1).an(mod m),这里,m=m1.m2.m3...mk...mn

    Mj=m/mj,MjMj^(-1)≡1(mod mj),(1≤j≤k)

    孙子定理的证明:

    由于,m1,m2,m3,...,mk,...mn,两两互素

    所以,m=[m1,m2,m3,...,mk,...,mn]=m1.m2.m3...mk...mn

    若,一次同余方程组有解c1,c2,则:c1≡c2(mod m)

    因为,m1.m2.m3...mk...mn两两互素,c1≡c2(mod mj),1≤j≤k

    这即证明了同余方程若有解,则解数为1

    下证,x=M1.M1^(-1).a1+M2.M2^(-1).a2+M3.M3^(-1).a3+...+Mk.Mk^(-1).ak...+Mn.Mn^(-1).an,确实是同余方程组的解,显然,(mj,Mj)=1

    所以,满足MjMj^(-1)≡1(mod mj)的Mj^(-1)必存在

    由MjMj^(-1)≡1(mod mj)以及mj|Mi(j≠i),于是推出:

    x=MjMj^(-1).aj≡aj(mod mj)

    即,x是解

    于是,则有:

    x≡2(mod 3)
    x≡3(mod 5)
    x≡2(mod 7)

    先求被3除余2,并能同时被5,7整除的数,这样的数最小是35,再求被5除余3,并能同时被3,7整除的数,这样的数最小是63,然后求被7除余2,并能同时被3,5整除的数,这样的数最小是30,于是,由35+63+30=128,得到的128就是一个所要求得的数,但这个数并不是最小的,再用求得的128减去或者加上3,5,7的最小公倍数105的倍数,就得到许许多多这样的数:{23,128,233,338,443,...},从而可知,23,128,233,338,443,...都是孙子问题的解,而其中最小的解是23.

    即,x=23

    南宋数学家秦九韶在1247年著成<<数书九章>>十八卷,全书共81道题,分为九大类:大衍类、天时类、田域类、测望类、赋役类、钱谷类、营建类、军旅类、市易类,它总结了前人在开方中所使用的列筹方法,将其整齐而有系统地应用到高次方程的有理或无理根的求解上去,其中对大衍求一术、正负开方术、高次方程的数值解法等有十分深入的研究,其中的大衍求一术,即,一次同余组解法,1852年,大衍求一术传入欧洲,人们发现大衍求一术和高斯的定理是一致的,而我国的研究早了一千多年,于是欧洲人就将大衍求一术,即,一次同余组解法称之为中国剩余定理,美国科学史家萨顿称赞秦九韶是:他那个民族、他那个时代,并且也是所有时代最伟大的数学家之一,孙子问题的解法可以推广成解一次同余式组的一般方法,秦九韶给出了理论上的证明,并将它定名为:大衍求一术.

    我们将孙子定理推广到一般情形,就可以得到大衍求一术(现代表示),如下:

    设有一数N,分别被两两互素的正整数A1,A2,A3,...,An相除得余数R1,R2,R3,...,Rn,即:

    N≡Ri(mod Ai),i=1,2,3,...,n

    若,求出一组正整数ki,i=1,2,3,...,n,使其满足ki.(M/Ai)≡1(modAi),则适合已给一次同余式组的最小正整数为:

    N=∑ki.(M/Ai).Ri-l.M,i∈[1,n]且i∈Z+,(l是某一整数,M=A1.A2.A3...An)

    这即为大衍求一术的现代表示

    以前,ki叫作乘率,各Ai叫作定数,M=ΠAj,j∈[1,n]且j∈Z+,叫作衍母,M/Ai叫作衍数,大衍求一即为求乘率ki的值,为简单起见,我们把M/Ai记为G,把Ai记为A,ki记为k,则,大衍求一即变为在G,A互素的情形下求满足于:kG≡1(mod A)的k值

    若,G>A,则,令G/A,求得余数g<A,则,G≡g(mod A),从而,kg≡1(mod A)和kG≡1(mod A)等价,因此,问题即变为求满足于kg≡1(mod A)的k值,g称为奇数.

    大衍求一术求解问题的思想是:把g置于右上,A置于右下,左上置天元一,g和A辗转相除,继而得商q1,q2,q3,...和余数r1,r2,r3,...,同时,按照一定的规则在左下,左上计算c1,c2,c3,...,直到右上rn=1为止(此时,n必为偶数,当rs=1且s为偶数时,则,令q(s+1)=r(s-1)-1,即有r(s-1)=rsq(s+1)+r(s+1),则,令n=s+1,rn=r(s+1)=1),则,左上的cn=qnc(n-1)+c(n-2)便是所求的k值,现代表示即为:

    于是,记c0=1,c1=q1,ci=qici-1+ci-2,d0=0,d1=1,di=qidi-1+di-2,diA-cig=(-1)^(i-1)ri(i=1,2,3,...,n),当rn=1(n为偶数)时,有:dnA-cng=(-1)^(n-1)rn=-1,从而,cng≡1(mod A),因此,cn=qncn-1+cn-2,即为所求k值,如论如何,最后一步都出现余数1,整个计算到此为止.

  • 相关阅读:
    ListenerExecutionFailedException: Listener threw exception
    SpringCloud网关无法加载权限及IP黑名单白名单
    IDEA引入jar但无法导入class
    net.sf.jsqlparser.statement.select.PlainSelect.getGroupBy()Lnet/sf/jsqlparse
    mysql索引
    selenium
    Zuul的容错与回退与Zuul的高可用
    fastjson json转linkedhashmap为null
    微信H5支付签名校验错误
    追踪线程
  • 原文地址:https://www.cnblogs.com/milantgh/p/7839736.html
Copyright © 2011-2022 走看看