Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1159156
  • 博文数量: 221
  • 博客积分: 10152
  • 博客等级: 上将
  • 技术积分: 1518
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-22 10:42
文章分类

全部博文(221)

文章存档

2018年(1)

2015年(6)

2014年(3)

2013年(4)

2012年(1)

2011年(5)

2010年(14)

2009年(10)

2008年(28)

2007年(33)

2006年(114)

2005年(2)

我的朋友

分类:

2008-03-21 10:01:57

秦九韶的「大衍求一術」,是初等數論裡同餘式計算裡絕不可少的方法,它比西方的方法簡便得多。這裡,記下筆者以前在書上學習的實際筆算方法,既是替自己備忘,也供有興趣的朋友參考。不過,這裡只是敘述具體算法,證明請恕從略。
 
  設有A和B兩個互素的正整數,如何尋得另一個正整數K,使得A和K相乘後被B除的餘數恰好是1(換一個說法是A乘K減1可被B整除)。「大衍求一術」就是幫助我們迅速尋找出這個K來的。其實,「大衍求一術」也是一種輾轉相除法,但看來更是巧妙神奇。
 
 
例一

求最小的正整數K,使之與23相乘後,被97除的餘數是1

 

具體的「大衍求一術」筆算法:

 

231   231   317    317    138

970   54     54     221    221

1      2      3      4      5

 

  說明:先在第一欄把23寫在上方,並須在其右上角寫上1(這不是指數,我稱作「寄數」),97寫在下方,寄數必須是0。然後兩數中以小的一個作除數,先重覆的連寄數寫在第二欄上,本例裡,23是較小的,以之除97,商數是4,餘數是5,把餘數5寫在第二欄下方,其寄數是4×104(這裡4是剛求得的商數,1和0分別是2397的寄數)。接下來以5作除數去除23,商數是4,餘數是3,所以在第三欄上方寫上3,其寄數是4×4117(這裡的4和1分別是523的寄數)。接下來以3除5,商數是1,餘數是2,所以在第四欄下方寫上餘數2,其寄數是1×17421,接下來,以2除3,商數是1,餘數是1,把餘數1寫在第五欄上方,其寄數是1×211738由於餘數1先在上方出現,算法到此結束,這1的寄數38就是我們所要求的最小整數K。

 

 

例二

求最小的正整數N,使之與97相乘後,被23除的餘數是1

 

具體算法:

 

971   51     51     25     25

230   230   34     34     19     114

1      2      3      4      5      6

 

  說明:先在第一欄把97寫在上方,寄數必須是1,23寫在下方,寄數必須是0,以小數除大數,商數是4,餘數是5,而5的寄數是4×011。接下來以5除23,商數是4,餘數是3,寄數是4×104。接下來以3除5,商數是1,餘數是2,寄數是1×415。接下來以2除3,商數是1,餘數是1,寄數是1×549由於餘數1先在下方出現,按大衍求一術的規定,必須多算一步,(在第5欄裡)以下方的1除上方的2,商數是1,餘數是1,寄數是1×9514。於是,14就是我們所求的最小正整數N。

 

 

更多的例子:

 

例三:某數與1989相乘後,被64除餘1。求滿足這題目的最小整數。

 

19891       51     51     113

640           640   412    412

 

按上面的計算,此數為13

 

 

 

例四:某數與64相乘後,被1989除餘1。求滿足這題目的最小整數。

 

641           641   4373  4373

19890       531    531    1404  11585

 

按上面的計算,此數是1585補充說明,由於餘數1首先出現在下方(第四欄),必須多算一步,以1除4,商數是3,餘數是1,寄數是3×4043731585

 

 

例五:某數與1949相乘後,被101除餘1。求滿足這題目的最小整數。

 

19491       301           301   87     87     227    227

1010         1010         113   113   310    310    137    164

 

故所求之數是64

 

 

 

例六:某數與101相乘後,被1949除餘1。求滿足這題目的最小整數。

 

1011         1011         1158  1158  3193  3193  1714

19490       3019          3019  8135  8135  2521  2521

 

故所求之數是714

 

 

  附帶一說,對於一般的一次同餘方程求解,「大衍求一術」亦是不可或缺的。比如下例:

                101Y 97           (mod1949)

這個方程相當於問某數Y101後以1949除之餘數是97,又或是某數Y10197能被1949整除,求出這些Y來。它的一個解法就是先求出哪個最小正整數乘1011能被1949整除,也就是先解同餘方程101K 1 (mod1949),從上面的計算可知這個數是714,所以上述的一次同餘方程的解是:

 

                Y 97×714         (mod1949)

            Y 1043             (mod1949)

驗算,101×104397確能被1949整除,而所有形如10431949t(這裡t1, 2, 3…)的整數亦是這個一次同餘方程的解。

 

 

阅读(2061) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~