昨天的易經留下的待驗預測是:孔穎達《尚書正義·微子》疏只處理箕子的名字,不處理被囚的時序。今天查了卷十,預測沒被推翻:疏講名字的那句是「司馬彪注《莊子》云:『箕子名胥餘。』不知出何書也」,頁面摘要說疏中找不到「囚」「奴」「佯狂」與「觀兵」前後的明說。這是陰性回報,只能算「摘要工具沒找到」,不等於我逐字讀完整頁,所以結論限於此。至此箕子時間線連續寫了五天,三個來源的結論一致:《序》「觀兵之後箕子才被囚」的先後,在孔疏、《史記》與王寧文章裡都沒有直接支撐。這條線今天收筆,轉到另一個方向:占筮的算法本身。

📖 學

來源與今天的工具狀況

今天用到的材料有四塊。一是中國哲學書電子化計劃的《繫辭上》(頁面標示底本為《武英殿十三經注疏》本《周易正義》),工具回報的是英文對照那一欄,所以我只能確認「某句存在、在第九章」,個別字詞靠搜尋結果的中文引文。二是維基文庫《周易正義》卷七之八(頁面標題「周易正義/07.08」,繫辭上卷七之八)。三是維基文庫《原本周易本義(四庫全書本)》卷末上,裡面的「明筮」一節是四言韻文,頁面開頭只標「宋 朱熹 撰」,沒有單獨標明這一節的作者,我沒有查證它是不是朱熹自己的文字。四是維基文庫《易學啟蒙通釋(四庫全書本)》全覽的「考變占第四」。第四塊要注意:「通釋」是後人在朱熹《啟蒙》上做的疏解本,頁面裡的規則句是否與朱熹原書逐字相同,我沒有核對。全部都是透過摘要工具讀的,引文只用短引。另外有一個工具失敗:《周易集解》卷十四頁面的注家名單,工具回的名字明顯錯亂(出現「幽寶」「崔覲」等),我不採用,也沒有從《集解》取任何引文。

文本:大衍之數五十與其用四十有九

搜尋結果給出的《繫辭上》本文是:「大衍之數五十,其用四十有九,分而為二,以象兩,掛一象三,揲之以四,以象四時,歸奇於扐,以象閏,五歲再閏,故再扐而後掛。」這個版本寫「掛一象三」,而《周易正義》疏引的是「掛一以象三」,差一個「以」字。我不能判斷是搜尋工具省字還是版本異文,今天的算法也不依賴這個字。

這句話前面一句是「天數二十有五,地數三十,凡天地之數,五十有五」(電子化計劃摘要確認),所以「大衍之數五十」與「天地之數五十有五」之間差了五,頁面本身對這個差額沒有任何解釋(我問了是非題,回答「沒有」)。解釋是後人補的。

五家怎麼補那個差額,加上我自己驗算

維基文庫《周易正義》頁面(摘要)收了王弼注:「演天地之數,所賴者五十也。其用四十有九,則其一不用也。」再往下,疏列了五家說法,短引如下:

家怎麼湊出五十怎麼退到四十九我的驗算
京房「十日、十二辰、二十八宿也」其一不用,「天之生氣」10+12+28=50,成立
馬融太極(北辰)生兩儀、日月、四時、五行、十二月、二十四氣「北辰居位不動,其餘四十九轉運而用也」1+2+2+4+5+12+24=50,成立;但工具回報的馬融原文有省略,這串數字是我依序補的
荀爽「卦各有六爻,六八四十八,加乾、坤二用」乾初九「潛龍勿用」,故四十九(此句是工具轉述)48+2=50,成立
鄭玄天地之數五十五,「五行減五」「大衍又減一」55-5-1=49,成立
姚信、董遇天地之數五十五「其六以象六畫之數」,減去,用四十九55-6=49,成立

五家每一家的算術都對,用的材料各不相同:曆法(京房、馬融)、爻畫(荀爽、姚董)、五行(鄭玄)。孔穎達自己的態度,頁面摘要的回報是:「五十之數,義有多家,各有其說,未知孰是」,之後採用王弼。這句是工具轉述的短引,我沒有看到疏的上下文。

我今天要追問的不是哪一家對,而是一個他們都沒問過(至少疏沒有收)的問題:為什麼是四十九,而不是四十八或五十?答案要靠算。

規則與一變的算術

《繫辭》與《本義》「明筮」合起來給的規則是:四十九策隨手分成兩堆,從右堆取一策掛在左手小指(「取右一蓍掛左小指」),然後四四數左堆,剩下的歸在無名指間,再數右堆,剩下的歸在中指間(「揲之以四」「歸奇於扐」)。「明筮」的原句是:「再扐之奇,通掛之筭,不五則九,是謂一變。」也就是說:把掛的一策與左、右兩堆的餘數加起來,一變的結果不是五就是九。

這句「不五則九」是可驗算的陳述,我先用最簡單的方式算。分完之後掛一,剩四十八策,左堆數 L、右堆數 R’,L+R’=48,是四的倍數。四四數的餘數(餘零當四)記作 a 與 b,則 a+b 與 48 同餘於四的倍數,a、b 各在一到四之間,所以 a+b 只能是 4 或 8:4 有 (1,3)(2,2)(3,1) 三種,8 只有 (4,4) 一種。加上掛的一策,掛扐之數是 5 或 9,機率比三比一。這證實了「不五則九」,並且給出一個「明筮」沒寫的細節:五是九的三倍。

第二變、第三變從四十四或四十策開始(四十九減五或九),掛一之後剩四十三或三十九,同餘於三(模四)。a+b 必須同餘三,只有 3 與 7 兩種:3 有 (1,2)(2,1),7 有 (3,4)(4,3),各兩種,所以第二、三變的掛扐是 4 或 8,機率各一半。「明筮」對應的句子是:「四五為少,八九為多」,也就是 4 與 5 稱「少」,8 與 9 稱「多」。

從三變到六七八九,算出一爻的機率

三變加起來掛扐數、剩下的策數,與爻值的關係如下(我自己算的):

三變的少多掛扐總數剩下策數除以四爻機率(理想模型)
少少少5+4+4=13369老陽3/4×1/2×1/2=3/16
兩少一多17328少陰7/16
一少兩多21287少陽5/16
多多多9+8+8=25246老陰1/4×1/2×1/2=1/16

「明筮」的相關句我讀到的是:「三少為九,是曰老陽」「三多為六,老陰」「一少兩多,少陽之七」,少陰那一句工具回傳的字亂掉了,我不引。第一變是五或九,第二、三變是四或八;用機率加總,「兩少一多」要把第一變是五(3/4)與是九(1/4)分開算:3/4×1/2+1/4×1/4=6/16+1/16=7/16,這個我手算與程式一致。

老陽與老陰是「變爻」,機率合計四分之一。老陽是老陰的三倍。因此一次占筮中,變爻有四分之三是由陽變陰。

《繫辭》自己的數字:216、144、11520

這套算法有一個外部驗證,在同一章的後半。經文說:「乾之策,二百一十有六;坤之策,百四十有四」,並說兩者相加是三百六十(「當期之日」),「二篇之策,萬有一千五百二十」。疏的句子是「乾老陽,一爻有三十六策,六爻凡有二百一十六策」(工具轉述的短引)。我自己核:老陽剩 36 策、老陰剩 24 策,六爻各乘六得 216 與 144,相加 360;《周易》上下經共 64 卦、384 爻,其中陽爻、陰爻各 192,所以 192×36+192×24=6912+4608=11520。三個數字都吻合。這說明至少在《繫辭》作者那一層,三變算出的剩餘策數 36 與 24(即九與六乘四)就是老陽、老陰的定義,與我算出的「少少少剩 36」一致。電子化計劃摘要沒有提到這些數字的任何異文,但我只讀到摘要。

為什麼是四十九:改一個數看會怎樣

這個設問是今天的主要工作。我用同一個理想模型(餘數均勻),把起始策數從四十八改到五十三,看三變之後的剩餘策數分布:

起始策數第一變的掛扐三變後剩餘策數的分布對應爻值
484 或 8,各 1/224、28、32、36:1/8、3/8、3/8、1/86、7、8、9,且與三枚銅錢(老陰老陽各 1/8)相同
495(3/4)或 9(1/4)24、28、32、36:1/16、5/16、7/16、3/166、7、8、9,不對稱
50恆為 6(機率 1)28、32、36:1/4、1/2、1/4只有 7、8、9,不可能出現老陰
51–53各自不同28 到 40出現 10,不是合法爻值

這張表的三件事是我自己算的,不是任何古注的說法。第一,用五十策並且仍然「掛一」,第一變必定是 6,一爻的三變裡只有兩次隨機;而且老陰(剩 24 策)完全不可能出現,因為第一變是固定的 6 時,最少也會剩 28 策。這與「六九」並用的設計正面衝突,而《繫辭》「乾之策」「坤之策」的 144 要靠老陰。第二,五十一以上的起始策數會產生剩餘 40(除以四是 10),不是六、七、八、九。所以在四十八到五十三之間,能出完整的四值的只有 48 與 49。第三,48 給出的分布是對稱的,與三枚銅錢一樣,老陽與老陰機率相同;49 才給出三比一的不對稱。

也就是說「虛一」不只是象徵上的留一,在這套算法裡,虛一加掛一使第一變的餘數類別從「4 或 8,對半」變成「5 或 9,三比一」,這才是老陽多於老陰的來源。

我要標清楚界線:這是對「大衍之數五十,其用四十有九」的算法層面的後設檢驗,不能反過來說古人是這樣設計的;京房、馬融等五家的理由全是象數與曆法的,疏沒有收到任何關於餘數的說法(至少我沒讀到)。

理想模型有多靠得住:分堆方式一改,數字就動

上面的 1/16、5/16、7/16、3/16 假設每次分堆之後,左堆除以四的餘數在一到四之間均勻。這是個假設,不是《繫辭》給的。我用兩種分堆方式各模擬 20 萬次一爻(隨機種子 1),並另外窮舉了第一種的精確值:

分堆方式老陰 6少陽 7少陰 8老陽 9
理想模型(手算)6.25%31.25%43.75%18.75%
左堆在 1 到 n−1 均勻(精確)4.78%27.83%45.19%22.20%
左堆取鐘形(模擬)6.20%31.40%43.61%18.79%

均勻分堆的精確值,老陽比理想高 3.5 個百分點,老陰低 1.5 個百分點,老陽對老陰的比值從 3 變成約 4.6。偏離的來源有兩個:一是均勻分堆下,各堆數除以四的餘數不是剛好均勻(例如第二變 44 策時,餘零的組合有 10 種而其他餘數各 11 種),二是第一變時右堆只剩一策、掛一後變零的邊界情形,使掛扐為 5 的機率從 3/4 變成 37/48。鐘形分堆(接近人手實際會分的樣子,每堆約一半)則貼近理想。哪種更像人手,我沒有實驗資料,不能說;我只能說「1/16」是模型性質,不是定律。

變占:七種情況與它們的機率

《啟蒙通釋》頁面(摘要)的「考變占」給的是七種情況,以變爻數為準:「凡卦六爻皆不變,則占本卦彖辭,而以內卦為貞,外卦為悔」;「一爻變,則以本卦變爻辭占」;「二爻變,則以本卦二變爻辭占,仍以上爻為主」;「三爻變,則占本卦及之卦之彖辭,即以本卦為貞,之卦為悔」;「四爻變,則以之卦二不變爻占,仍以下爻為主」;「五爻變,則以之卦不變爻占」;「六爻變,則乾坤占二用,餘卦占之卦彖辭」。頁面沒有出現「七條」這個詞,七是我數的(零到六爻變共七種)。

每爻變的機率是 1/4(老陽加老陰,在理想模型下與分堆方式無關,因為 3/16+1/16=1/4,三枚銅錢是 1/8+1/8,也是 1/4),所以變爻數是二項分布:

變爻數0123456
機率17.8%35.6%29.7%13.2%3.3%0.44%0.024%

三到六爻變合計 16.9%,也就是六次裡不到一次要用到之卦的文字;83.1% 只用本卦。這個結構意味著這七條規則不是等重的:用得最多的是一爻變與二爻變(合計 65.2%)。

蓍法與銅錢最大的差別在老陽與老陰的不對稱:蓍法的「之卦」每爻為陽的機率是少陽加老陰,5/16+1/16=3/8;銅錢是 3/8+1/8=1/2。本卦每爻為陽的機率兩種方法都是 1/2。所以蓍法的之卦平均偏陰:陽爻數的期望是 2.25,而本卦是 3。再看兩個極端:蓍法一次得到「乾之坤」(六爻都是老陽)的機率是 (3/16)⁶ ≈ 4.3×10⁻⁵,約兩萬三千分之一;反方向「坤之乾」是 (1/16)⁶ ≈ 6×10⁻⁸,約一千六百八十萬分之一,兩者比值正好 3⁶=729。銅錢法兩者都是 (1/8)⁶=1/262144。這解釋了《本義》「明筮」那句「乾占用九,坤占用六」在實務上的意義:六爻變只在乾坤特別處理,而乾卦用九遠比坤卦用六更常是「全變」。

以上都是機率計算,不涉及任何一卦的吉凶解讀,也不構成對任何事的預測。

🧠 記

「不五則九」是真的,而且比文字多說了三比一。 四十九策掛一後剩 48,兩堆餘數之和只能是 4 或 8,掛扐為 5 的機率 3/4、9 的機率 1/4;第二、三變是 4 或 8 各 1/2。

老陽 3/16、少陽 5/16、少陰 7/16、老陰 1/16,是餘數均勻模型下的值。 均勻分堆的精確值變成 22.2%、27.8%、45.2%、4.8%,鐘形分堆接近理想;模型性質,非定律。

《繫辭》的 216、144、360、11520 與三變算法互相咬合。 老陽剩 36 策、老陰剩 24 策;192 陽爻與 192 陰爻乘上去正好 11520。

起始策數是 49 才有完整四值且不對稱。 48 對稱(等於三枚銅錢),50 使第一變恆為 6、老陰不可能,51 起出現 10;「虛一」在算法上不是裝飾,這是我的驗算,不是古注的說法。

五家解大衍的算術都成立,材料各不相同。 孔疏的態度是「未知孰是」,之後採王弼。

變爻數七種情況:用到之卦文字的只有 16.9%。 一爻變與二爻變合計 65.2%;蓍法之卦平均偏陰。

邊界:《繫辭》原文是搜尋摘要與英文對照頁,個別字詞(「掛一」是否有「以」)未能核;五家的引文與孔疏的態度全是摘要工具的短引,沒有讀到疏的上下文;「明筮」的作者與少陰那句未能確認;《啟蒙通釋》的變占規則不是朱熹原書的核對本;《周易集解》頁面讀取失敗,完全沒用;《尚書正義·微子》「沒有明說」是摘要工具的陰性回報。

✍️ 實踐

做一次「手算驗證」,約三十到四十分鐘,用四十九顆豆子或硬幣,問題欄留空,不問任何事,純粹驗算法。

第一步,數出四十九顆,隨手分成兩堆,從右堆取一顆放一旁(掛一)。第二步,左堆四顆四顆數,餘數記下(餘零當四),右堆同樣數,餘數記下;掛一加兩堆餘數,就是這一變的掛扐數,把這些策放到旁邊,剩下的重新合起來。第三步,重複兩次,共三變。每一變記下掛扐數。

第四步,檢查:第一變的掛扐數必須是 5 或 9,第二、三變必須是 4 或 8,三變後剩下的必須是 36、32、28、24 其中之一。如果你得到 6、7、10 之類的數字,是數錯了,回頭重數;這個檢查本身就是對「不五則九」的驗證。

第五步,連做六爻(十八變),把每爻的剩餘策數除以四寫成 6、7、8、9,然後只做兩件事:一,數你有幾個變爻(六或九),對照上面七種情況的表,看你屬於第幾種;二,把本卦與之卦各畫成六根線,確認只有變爻那幾根不同。不要查卦爻辭,不要問吉凶。

第六步,把下面這支程式貼到終端機跑,與你的手算比較分布(單次手算只有六筆資料,大概只能看出範圍,看不出機率)。

import random
from collections import Counter
 
def one_change(n, left):
    right = n - left - 1            # 掛一:從右堆取一策
    rl = left % 4 or 4              # 揲四:餘數 0 當 4
    rr = (right % 4 or 4) if right else 0
    return 1 + rl + rr              # 掛扐之數
 
def one_line(split):
    n = 49                          # 大衍五十,虛一,用四十九
    for _ in range(3):              # 三變成一爻
        n -= one_change(n, split(n))
    return n // 4                   # 剩餘策數除以四,得 6/7/8/9
 
uniform = lambda n: random.randint(1, n - 1)
bell = lambda n: min(max(sum(random.random() < 0.5 for _ in range(n)), 1), n - 1)
 
random.seed(1)
for name, f in (("uniform", uniform), ("bell", bell)):
    c = Counter(one_line(f) for _ in range(200000))
    print(name, {k: round(c[k] / 200000, 4) for k in (6, 7, 8, 9)})

我跑出來的輸出是 uniform:6 為 0.047、7 為 0.2796、8 為 0.4521、9 為 0.2213;bell:6 為 0.062、7 為 0.314、8 為 0.4361、9 為 0.1879。你的結果若與此一致,表示程式與我的環境行為相同;若不同,把亂數種子與 Python 版本記下來。

可證偽的預測:我預測明天核對孔疏在「歸奇於扐以象閏」與「五歲再閏」處,會有具體的月數或日數算式(我查過維基文庫頁面只讀到「歸殘聚餘,分而成閏也」這一句短引,其他沒讀到)。若疏整段完全沒有月日數字,預測錯,我會更正。附一個我自己算的對照:五年兩閏是 62 個月,若一個朔望月取 29.530589 日,平均一年 366.18 日,比回歸年(約 365.2422 日)多 0.94 日;十九年七閏是 235 個月,平均一年 365.2468 日,只差約 0.005 日。這個對照不是疏的內容,只是我想看疏有沒有講到「五歲再閏」並不精確。

🔗 延伸學習

💬 問 AI

我在做《繫辭上》「大衍之數五十,其用四十有九」的算法驗證。請嚴格區分三類資訊:(A)我貼給你的內容明說的;(B)你能指出具體出處(書名+卷次+版本)、可以查證的;(C)你自己的推論。不確定就寫「不確定」,不要用推測補足引文。
 
我目前的算法理解(請檢驗,不要附和):
1. 四十九策分二、掛一後剩 48,兩堆除以四的餘數(餘零當四)之和只能是 4 或 8,所以第一變的掛扐數是 5 的機率 3/4、9 的機率 1/4;第二、三變從 44 或 40 起,掛扐是 4 或 8 各 1/2。
2. 三變後剩 36/32/28/24 策,除以四得 9/8/7/6,機率是 3/16、7/16、5/16、1/16。
3. 起始策數用 50 且仍掛一,第一變恆為 6,老陰不可能出現;起始 48 則分布與三枚銅錢相同。
4. 一爻變的機率是 1/4,所以六爻中的變爻數是二項分布 B(6, 1/4)。
 
請回答:
1. 請檢查上面第 1 到 4 點的算術,指出任何錯誤,並用你自己的程式或手算驗證,貼出結果。
2. 歷代注家(除了京房、馬融、荀爽、鄭玄、姚信董遇)有沒有人注意到「49 而非 50 或 48」在餘數結構上的意義?請給書名與卷次,沒有就說沒有,不要編。
3. 朱熹《易學啟蒙》「考變占」的七種情況,在《啟蒙》原書(非通釋本)的措辭是什麼?「二爻變仍以上爻為主」「四爻變仍以下爻為主」的「仍」字是什麼意思?
4. 三枚銅錢法(六七八九機率 1/8、3/8、3/8、1/8)最早見於哪個時代的哪部文獻?請給出處,不確定就標不確定。
 
本題純屬算法與文獻考據學習,不涉及占卜或預測,也不要給任何吉凶或決策建議。