2024年12月4日 星期三

數學之美 32 ─ 質數回字圖

http://4rdp.blogspot.com/2024/12/32.html


Shutterstock/TPG Images

INSIDE 硬塞的網路趨勢觀察報導一篇「全球找到新的最大質數!破 4100 萬位數、17 國資料中心協力創雲端運算里程碑」專欄文章,這個最新質數是  2 的 136,279,841 次方減 1,是第 52 個被發現的梅森質數。

這篇文章吸引我的是上面的質數回字圖。

似乎有三個方向能規律找到質數:
一、3, 13, 31, ....
二、5, 17, 37, ....
三、5, 19, 41, ....

我還沒花時間進一步研究,先記錄下來。

74 則留言:

  1. 新的桌遊創意:質數戰爭

    2人以上,10人以上亦可。

    當一個玩家被別人找到他的兩個質數,則該玩家被狙擊。狙擊者有戰功,記一分。最後分高者為贏家。

    遊戲規則:
    把1到十萬之間的質數全部列舉出來,記到遊戲板上。

    每個玩家拿著手卡,正面不給別人看到,自己計算用。背面則要公示。

    遊戲開始時,玩家挑選任意兩個質數,在手卡上計算它們相乘的結果,把該結果寫到手卡背面展示。

    遊戲時,每人輪流提出一個篩選條件,比如「3結尾的舉手」,則兩個質數含有3結尾的必須舉手。再如「大於5555的舉手」,「含有7的舉手」,等等。

    第一個喊出某玩家X的兩個質數的玩家A,則玩家X陣亡,玩家A記戰功1分。

    最後分高者獲勝。

    回覆刪除
    回覆
    1. 游戏规则第一条有些费纸 lol

      刪除
    2. 費紙不是問題。10000〜99999共有8363個質數。每行打二十個,只要四百多行。

      刪除
    3. 我也有一个桌游创意,还没想好名字。
      道具:
      两位数的分数板一个
      0-9的基本数字卡片若干张
      加减乘除符号卡片若干张
      10-99的目标数字卡若干张(卡面上另写有分值)
      (可扩展:数学名人卡若干张)

      准备工作:
      把目标数字卡(可含扩展)洗均匀,放成一叠,记为A
      把所有其他种类卡洗均匀,放成一叠,记为B
      从A中抽取一个作为起始数字,同步在分数板上
      从年纪最大的玩家开始,顺时针数起始数字个人作为起始玩家。
      各玩家依次从A中抽取m张,从B中抽取n张,作为起始手牌。

      游玩步骤:
      玩家可以从以下几个动作中选择一个执行
      1. 抽牌:从A上方抽x张卡,保留x-1张在手上,另1张归置牌堆底部(手牌最多保留n张)
      2. 抽牌:从B上方抽y张卡,保留y-1张在手上,另1张归置牌堆底部(手牌最多保留n张)
      3. 出牌:从手中打出若干张卡,与分数板上所示分数进行*计算*,并更新分数板。
      如果更新分数板后,所示分数与手中目标卡分数相同,则保留该目标卡放置在玩家面前,表示获得。

      游戏结束:
      如果某轮所有玩家结束行动后,某玩家面前的目标卡分值之和大于z,则该玩家获胜。

      刪除

    4. 若干張、m、n、x、y、z都不知道是幾,無法試行。

      玩家手上的牌可以給別人看嗎?如果別人看了會有何後果?進攻防守的要點在哪?遊戲策略是甚麼?如果得知玩家A拿了x張牌就能取勝,B玩家如何去阻止對方?

      最後一句話:「如果某轮所有玩家结束行动后,某玩家面前的目标卡分值之和大于z,则该玩家获胜。」怎麼又莫名其妙多出另一種獲勝方式?而且是大於z,那豈不是手上的牌越大越好?那豈不是每個玩家都會攢著大牌不出?

      刪除
    5. 數字的桌遊商業市場小,要一般人玩它恐怕都逃跑了,質數戰爭的前置作業太耗時了,設計者提供它會比較好,計算兩數相乘,善於心算的人,將是這個遊戲的贏家。

      孫老師,你的遊戲建議取名為「數遊世界」,這遊戲很像四張撲克牌計算 24

      刪除
    6. 所有我設計的遊戲,都是可以簡易自製的,不走商業。

      「一般人玩它恐怕都逃跑了」,確實是有這樣的擔憂。一個遊戲如果單純只有機制,而沒有故事、美工,確實會嚇跑很多人。

      不過我想起了一件事,曾經日本有一種遊戲機,唯一功能是生成「數和」題,跟數獨差不多的一種數字遊戲。我不確定它後來有沒有大賣,聽說很受香港年輕女性歡迎。但是它既然能上市,說明了數字遊戲是有市場的,有不少人就是喜歡數字遊戲。包括數獨也有不少人喜歡玩。

      我個人也是很喜歡數字類遊戲的,我最喜歡的是「數塔」。我網收集了大部份的數字遊戲。

      「前置作業太耗時」,不知是指「挑兩個質數並相乘太耗時」?還是「列出所有小於十萬的質數耗時」?

      設計者提供它,它指的是甚麼?如果指的是遊戲板,即質數表,那是由遊戲提供者打印的。

      計算三位數以上的乘法,用筆算會穩妥些,心算不那麼可靠了。四位數以上的乘法,就不可能再用心算了。


      這個遊戲本身或許不那麼吸引人,但是如果加上了團隊分工協作,四五個人成立一個國家,想辦法攻陷別國。我相信它是能玩上癮的。

      十萬以內的質數表可以在此打印:https://ejsoon.win/prime-war/

      刪除
    7. 以下一些简单的设置供参考:(因没有试玩还不知道是否平衡)
      0-9的基本数字卡片各2*玩家人数张
      加减乘除符号卡片各4*玩家人数张
      10-99的目标数字卡各1张
      (卡面上另写有分值,例如24很容易达成,分值就低,1分;29是质数,比较难达成,分数就高,3)具体分数值还需要试玩之后调整
      初始时:
      初始A手牌 m = 2
      初始B手牌 n = 4
      手牌上限(之前误写作n) k = 8
      行动时:
      从A中抽卡x = 2
      从B中抽卡y = 3
      获胜分数z = 20

      刪除
    8. 0-9的基本数字卡片 和 加减乘除符号卡片 张数可以先各印十张测试用,一共是140张
      10-99目标数字卡片 各一张,一共90张
      再加上组成活页两位数分数板的卡0-9各2张,共20张
      总计250张。用质素高些的卡纸印刷也不会太超预算

      刪除
    9. 你設計的遊戲,在我看來並不好玩。

      首先,你設計的是一個牌類遊戲。傳統的牌類遊戲,一副牌只需要54張牌,很多傳統的玩法都很好玩。

      你現在要印那麼多張牌,也都沒有甚麼花樣,就是單純的一個數字。玩法就是加減乘除算出目標數字,那它比傳統撲克牌好玩在哪裏呢?

      還是我前面的問題,你的攻防策略是甚麼?每個人就只是抽牌之後自己算加減乘除?那自己一個人玩好了。牌類遊戲的樂趣就在於跟別人的對抗,因此當你摸到一張好牌時你會很高興。現在你設計的遊戲,無論摸哪張牌,都不會感到快樂。

      現在的桌遊,或者紙牌遊戲,都講求各種花樣。即便如此,我覺的傳統的紙牌遊戲也已經足夠好玩了。

      刪除
    10. 你这样想很正常,每人都有自己的喜好。

      首先,你提出的互动性问题,我现在可以解答一下。
      这个游戏玩家间互动的点在于公共的记分板。
      由于每人的目标不同,有的玩家需要增大数字,有的人需要减少数字。
      前置玩家针对公共的记分板作的改动很可能影响后续玩家的部署。
      另外,由于分数是公开的,当一位玩家的分数接近胜利时,
      其他玩家会自然联合起来,使这位玩家不能轻易获胜。这也是互动的一部分。

      其次,你提到“摸到好牌会很高兴”,这是桌游设计上的运气属性。
      运气成分所占比重多少也决定了这款游戏的欢乐程度。
      在锄大D或斗地主中,运气好的玩家可以让其他玩家一张牌都未出便结束游戏。
      而在桥牌中,每位玩家被规则限制每轮只能出一张牌,
      手牌点数高的玩家需要思考怎样获得更多的分数,而手牌点数少的玩家要思考怎样输少一些。
      无论牌点数如何,所有玩家都可以玩到牌局结束。这也是美式与德式桌游的区别。

      综上,一个游戏和另一个游戏可以相似,也可以不同,无谓比较。

      刪除
    11. 另外,由于分数是公开的,当一位玩家的分数接近胜利时,
      其他玩家会自然联合起来,使这位玩家不能轻易获胜。
      ---------
      這是我主要想談的,玩家之間如何制衡?在你不知道他手裏有哪些牌的情況下,分數板要如何變化才能使其不能再得分?
      這個問題我已經問了不止一遍了,這遊戲缺乏進攻點。

      刪除
    12. 通过观察
      1. 玩家超出手牌上限弃掉的牌

      2. 玩家试图改变分数板试图靠近的数字
      可以猜到目标牌大概的范围

      刪除
    13. 根據你的規則,玩家一次只棄一張牌,你也只能知道他棄的牌,而不能知道他有哪些牌。因為你的遊戲機制是所有牌都能任意組合的,不存在哪些牌之間有必然關聯。

      第二點更是無從談起。你的運算中有乘法和除法,玩家要靠近的有可能是某個數的倍數,或者該玩家只是為了阻撓其它玩家。根本推不出任何東西。

      另我不認為質數在你這裏有多難拿。因為你這裏還有加法。直接加到就行了。要不乘到某個數再加減。

      並且每拿一次牌,要棄哪張,要用哪張,都要想很久。誰願意等這麼久,茶都涼了。

      所以「加減乘除紙牌遊戲」的設想並不成立,不好玩。

      當然我的「質數戰爭」也存在同樣的問題,那就是提出篩選條件的間隔時間是多少。如果一直在計算,又沒有空去提問對方。所以可能團隊合作會好玩些,一個人負責算,另一個負責想。

      刪除
    14. 因為看到「把1到十萬之間的質數全部列舉出來,記到遊戲板上。」這一段文字,覺得遊戲的前置作業太操人了,這應該是遊戲設計者應該預備好,至於兩質數相乘,由玩家處理還可以。

      另外老師的數字卡牌遊戲,250 張太多了,縮成 100 張應該會比較好,也就是 0 ~ 9 數字牌各十張,任抽兩張組成兩位數當目標數字,然後用單張數字牌去計算,這樣對小學生也容易上手。如果要降低運氣成分,可以加 50 當成起始數值,大家都可以增加或減少來趨近目標值。

      我同意 ejsoon,兩位的遊戲如果採用團隊分工應該比較好玩。

      刪除
    15. 我在三四年前就開始構思用質數來做一個遊戲。2021年8月我寫了一個html+js程式,能在三秒內得到十萬以內的所有質數。同時提供文本結果下載,鏈接為https://ejsoon.win/prime-war/

      我設計的遊戲,質數表當然由我提供。所以列出所有質數本身不是問題,問題在於設計的遊戲可不可行,好不好玩。

      前面說的流程問題,我的設想是:

      第一局熱身,每人先取兩個三位數以內的質數相乘。初始先每人問5個問題,然後給30秒計算時間,之後問3個問題,再給30秒,最後問兩個問題,則餘下時間全部用於計算,不再提問了。

      第二局開始正式,取四位數的兩個質數。開始可以問7個問題,一分鐘計算時間,再問5個問題,計算,再問3個問題,計算,最後問兩個問題,之後就只能計算,不再問了。

      後面如果玩家們樂此不疲,都喜歡這個遊戲,則可以進階到五位數的質數。

      刪除
    16. 對於「加減乗除紙牌遊戲」,我有一個改良版:

      一到四人玩。

      只用到普通撲克牌的52張牌,除去二鬼。

      遊戲初始,指定一個二位數。也可以認為這個二位數是鬼牌變的。

      遊戲目標是加減乘除算出這個二位數。

      之後每個人發五張牌。

      1〜10是數字牌,它們的花色「黑桃、紅桃、梅花、方塊」分別代表「加減乘除」。比如黑桃7是+7。

      JQK是符號牌,當把一張符號牌壓在數字牌上,則可改變數字牌的符號。比如把一張梅花K壓在方塊3上,則表示乘3。

      除法只能整除,否則不可使用。括號可以無限使用,兩張牌水平貼合則為括號中的兩張牌,比如(黑桃3-紅桃1)乘以梅花7。

      不必用完所有手牌,只要能算出目標數字即可宣告獲勝。

      不存在時間差,每一輪只要能算出都是贏家。

      當所有人手上的五張牌都不能算出目標結果,則進入棄牌環節,每個人輪流,棄一到五張牌,然後在牌堆中補足五張。棄的牌扔桌面上。

      當牌堆不足五張牌,則把桌面的牌集合並洗牌,然後加入牌堆底部。

      本規則優點是只用到普通卡牌,規則簡單。缺點可能是除法不太好用。或許可以加上「用到除法可以加分」的進階選項。

      刪除
    17. 多位數乘法遊戲的市場,應該是剛學多位乘法的小學生,三四位數乘法是很好的練習,不過像我這種雖然喜歡數學的老頭,對此興趣缺缺。

      關於加減乘除,給一個建議不要用花色限定運算符號,而是改成擺放方式來表示,例如放直|為加、放橫 ─ 為減、放左斜\為乘、右斜/為除。

      刪除
    18. 不同的遊戲有不同的適用場景。如果在一群人熱熱鬧鬧開party時拿出質數戰爭,那肯定會冷場的。用這個標準判斷,則所有的數字類遊戲都不好玩。

      當人不知道一個遊戲怎麼玩時,他就不會喜歡這個遊戲。比如圍棋,很多人不知道圍棋怎麼玩,他也不覺的圍棋好玩。


      質數戰爭作為一個數字遊戲,它並不適合在人多時拿出來玩,但它會是一個好玩的數字遊戲。


      仍以45339217為例,它可能是五千多乘八千多或九千多,或是六千多乘七千多。則第一個問題可能要問的是,兩個質數的差是否小於2000。

      如果回答否,則接下來問是否有數字範圍在5000〜6000內。進一步用二分法,以及尾數篩選,最後只剩不多的幾個備選數時,才用計算器來驗證。

      我們知道,在上百萬的數字裏面,用二分法找到一個數字是很快的。那麼為甚麼不直接把遊戲做成「用二分法找數字」?如果僅僅是這樣,則不會有前面提到的其它篩選條件。

      當我們玩幾輪之後,經驗增長,找到了這個遊戲的訣竅,則能更快的在有限的提問中找到這兩個質數。我在玩breaklock時,也是不斷的研發和改進方法,才總結了現在的玩法。而其他高手,可能就有不同的獨門絕技。

      刪除
    19. 不過「質數戰爭」確實也有兩個問題有待解決,一是提問的機會未設關卡,二是要用到紙筆或計算器。

      以上兩個問題導致「質數戰爭」沒那麼好玩,純粹就是在做計算題。

      刪除
    20. 如果需要准确知道对方手上有什么牌,可以先获取名人的能力,有的能力可以指定一名玩家秘密检查对方手牌,有的可以让大家公开手牌互相检查

      刪除
  2. 《質數戰爭》規則更新

    經過思考,質數戰爭規則更新,這回不再有提問環節,也不需要計算器或紙筆,而只需要兩位數的心算。

    同時,將只用到四位數的質數,一共有1061個質數。

    遊戲規則:

    每個玩家手裏都有一個四位數的質數表,從中挑兩個質數,把它們的相乘結果給出,同時給出它們每一位數的差。

    比如一個玩家挑了2417和3793,則兩數相乘結果是9167681,每一位數的差是1384,注意不是兩數的差,而是每一位數的差:(3-2)(7-4)(9-8)(7-3)。

    這就是全部信息!之後每個玩家藉助手中的質數表,通過心算,最終算出對方的兩個質數並獲勝!

    規則介紹完畢!

    回覆刪除
  3. 再簡化:直接給的就是兩數的差。

    回覆刪除
  4. 建議新遊戲規則,給兩個任意四位數乘積,以及每位數差,這樣少了質數表可以參考,不過不是每位玩家都能四位數相乘心算,紙筆少不了。

    回覆刪除
  5. 一個新的想法是,把二位數乘法表,即11*11到99*99,也打印出來,這下就真的只用查表,而不必心算了。

    當我們拿到9167681和1376時,這兩個數只差一千多,則只能是2千多乘3千多,則查表可得,25*38就太大了,因此千位和百百數是24*37。這時再查表,哪對兩位數相差76,且乘積等於7681。通過兩張表的來回對比,最終就能只查表而不用(紙筆或計算器)計算,得到兩個質數。

    或許加了「兩數之差」之後,就不一定要用質數了。不過恐怕玩家們還是希望挑到質數,並且四位數的質數只有1061個,而四位數的所有數有9099個。

    當我們知道兩個二位數的乘積是7681時,如果是質數,那兩個數的尾數都只能是1,3,7,9,就能在質數表上更快的找出來。

    回覆刪除
  6. 我喜歡你推薦的 https://ejsoon.win/breaklock/ 一樣是幾A幾B,但是難度感覺變高了。

    ejsoon 你對質數有著難以撼動的情感,推薦你看 改變世界的九大演算法 (Algorithms That Changed the Future)一書,運用公鑰加密 (public-key cryptography) 設計出一破解密碼遊戲更棒,這遊戲至少三人玩,玩家兩兩互傳訊息,其他人來破解。

    回覆刪除
  7. 我寫過《費馬小定理的介紹及證明》:https://ejsoon.win/fermats-little-theorem/
    這篇文章不知為何瀏覽量很高,但是沒人留言。

    rsa非對稱加密,我也做過一個小工具:
    https://ejsoon.win/rsa-encrypt/

    不過經過研究,rsa加密是無法應用在數字遊戲上的,因為它有用到冪運算,即p^m,那m大於3就已經沒法人工算了,而rsa加密的m往往有上千位。

    目前《質數戰爭》是我能想到的可以遊戲化的最好的辦法。當然還可能可以改進,但是基本機制已經定下了:就是挑兩個質數,把相乘結果展示出來,一旦某方的質數被別人算出來則陣亡。

    rsa加密的原理也是,2048位的質數很容易得到,但要質因數分解基本不可能。則跟「質數戰爭」的原理是相同的。

    回覆刪除
  8. 質數都可以列表,雖然 p^m 列表不容易,但是 RSA,每個人選擇一位數為自己私人數字,然後以 2 為基數,時鐘採 11,這樣小範圍列表,應該是一個有趣的破碼遊戲。

    回覆刪除
  9. 具體要怎麼玩呢?以2為基數,時鐘採11,我不是很理解。

    不太懂rsa加密如何做成遊戲。就算我們允許使用手機來用2048位加密,那遊戲要怎麼玩呢?

    回覆刪除
  10. 前面的質數戰爭有漏洞,如果知道(x*y)和(x-y),則可湊成一個「一元二次方程」,從而簡單求解。

    因此提示數字改為只給出千位數和個位數的差。

    回覆刪除
  11. 最新的結論是,不需要任何提示,只需要給出兩個質數的積,然後我們就可以用二位數乘法表,最終算出這兩個質數。

    回覆刪除
    回覆
    1. 是的,給兩質數乘積,再花時間就可以解出。

      刪除
    2. 今日《質數戰爭》已經研發完成,只用紙筆和查表,即可算出對方的兩個質數。

      用到三張表,質數表,乘法表,以及尾數表。

      實測:

      敵方數字為29167367

      最終算出它等於3079*9473,用時34分51秒。

      當然算出來之後發現,這是運氣好的情況,因為我準備要計算的範圍是29〜54,而算到30就得到結果了。

      按這個速度,一個人要攻陷敵方,需要十個小時。因此,團隊合作是一種更好的玩法。十個人能在一小時左右攻陷對方。

      尾數表真的是一個巧妙的發現,後面再作介紹吧。

      刪除
    3. 同時,質數戰爭的提問環節也可保留。

      具體規則是,任何一方任何時機想提問時,則發出請求。對方如果同意,則互相問對方一個「是非題」。

      如果有一方拒絕,則接下來雙方將不能再提出請求。

      刪除
    4. 從你提供的例子,還提供質數表、乘法表、尾數表那就太佛心,我會利用質數的最後兩位相乘來尋找,
      79*73 = 5767,這樣搜尋就可以縮短解題時間。

      刪除
    5. 你的思路跟我相同,這就是尾數表的作用。

      現在解題方法升級,可能兩小時左右就能解開。

      計算步驟已經公式化。三個表格用A3紙打印,已經屬於最精簡也最高效的方法了。

      刪除
    6. 蛤,用兩小時解題,如果不是數學愛好者,很多人沒多久就放棄了。

      刪除
    7. 我說的兩個小時是前面的情況,解法還在不斷的探索和升級中。並且我說兩個小時,是最極端的情況,也就是把所有可能都輪詢一遍,最後一個才是對的。一般不會是最後一個。

      與此同時,我只負責提出遊戲規則,至於玩家要用何方法,那要他們自己研究。說不定他們能找到比我的方法更好的方法呢?

      總之,不要只停留在「設想」上,如果有人認為他有辦法,則他應該自己去想辦法設計表格,打印,然後用他打印出來的表格通過筆紙計算出兩個質數。

      當然我也會分享我的辦法,只是寫文章需要時間。

      刪除
    8. 了解,這個遊戲很考驗玩家耐性,專長屬於數學或程式設計類型的人,比較適合。

      刪除
  12. 經過思考和研究,我還找到了用第三位數快速篩選的方法,這是真的可以快速篩出不對的組合。

    回覆刪除
    回覆
    1. 先用尾一篩選一次,再尾二篩選一次,應該可以很快找到。

      刪除
    2. 很快是多快?能具體舉個例子嗎?

      刪除
    3. 不知道能多快,我是憑直覺估計遊戲,以你舉的例子,湊尾數 7,不是 1x7 就是 3x9,
      因為 3079 x 9473 = 291673(6)7,當 3x9=[2]7,看尾二 a3 x b9,
      檢查 b = 1,4,7 3 x b = {3},1{2},2{1} 不會超過 {4}=(6)-[2],這些質數就可以保留
      那將可以從質數表篩出適合的數值

      刪除
    4. 我的尾數表是直接用後兩位篩選的,即把29167367中的67的所有乘積組合都列出來。

      然而,以30xx和94xx開頭的質數,能相乘之後尾數等於67的組合不止一個,以下的都可以:
      3001*9467
      3011*9497
      3037*9491
      3079*9473
      3089*9403

      那麼,如何快速的篩出不對的組合?這就用到了我的方法。這是我在前天的早上沒起床時想到的方法,用第三位數「3」來篩選。

      以3037*9491為例,當我們在尾數表查到37*91=xx67時,我們還拿到了xx=33。則用
      {30}{37}
       X
      {94}{91}
      的個位數交叉相乘,再加33,結果也只管個位數,即「0x1+4x7+33」的個位數是1,不等於「3」,即可快速篩掉這組。

      目前這是我找到的最快的方法了。

      刪除
  13. 最新進展:解開62397421=6971*8951,只用了45分56秒。用了A4紙單面一半不到。

    回覆刪除
  14. 也就是說,當解題步驟標準化之後,大多數題目都能在一個小時內,最多用掉一張A4紙的正反面(不許用橡皮擦),就可以解開。

    回覆刪除
  15. 比起前天算兩種情況花了34分鐘,現在算8種情況只用了45分鐘。解題效率明顯提升了。

    回覆刪除
  16. 計算難度不超過一張 A4 紙,解題時間大約半小時,應該沒問題。

    回覆刪除
    回覆
    1. 前面提過,作為一個遊戲,只要互問幾個是非題,解題難度和時間都是可以降低的。同時,如果數值只有九位數,或者大於6百萬,因為組合數量較少,時間也會減少。前面的題62397421就是組合數量少的。

      今在計算19165219的時候,發現這種一千萬到二千萬的,是最難最耗時的。要從19算到44,而且每一個都有五種配對。這樣的題目,用現在最高級的方法,可能兩個小時也不一定能算出來。

      刪除
  17. 當我解出了19165219=2939*6521之後,我的解題方式再次升級。

    此前的遊戲主板是二位數乘法表和計算筆紙,現在改成了質數表,手指在上面移動,用其它東西蓋住不需要的部份。把尾數表剪成條,只取當前需要的那條。則效率大大提升。

    遊戲流程也更加流暢,先計算所有質數組合的匹配範圍,以及每個情況的大小數。之後再篩選每一個質數組合。靠第三位數就能把大部份不對hspi組合篩掉。

    回覆刪除
  18. 今算33418949=3499*9861,只用了17分03秒,還加上了表格準備的時間。

    而最悲觀的情況,要把33〜57算完,每個要3分鐘左右,大概在一個小時左右可以解開。

    昨夜解決23281393=3709*6277用了一個半小時,期間計算方法也再次精簡升級。

    不過這幾日一直在想另一種方法,今午終於構思完成了。

    也就是說,質數戰爭可以有不同的方法作戰。就像武林大會,不同的人有不同的武功流派,哪一種武功更厲害?那就上擂臺一較高下。

    回覆刪除
  19. 嗯,個人認為質數解法有各種方法,它們應該分別適合不同類型
    尾數1,要解析 1*1, 3*7, 9*9
    尾數3,要解析 1*3, 7*9
    尾數7,要解析 1*7, 3*9
    尾數9,要解析 1*9, 3*3, 7*7
    再解析尾數兩位再縮小計算範圍,才有辦法縮短破題時間。

    回覆刪除
    回覆
    1. 你的意思是,19165219,把所有尾數是1的和尾數是9的,3*3,7*7,全部找出來?我不太理解你的方法如何實際操作。

      經過實驗(只能實驗,原理不明),發現每種三位尾數的相乘組合可能,都在1400到1500之間,不會大於1500。根據這個新發現,我只要打印一百張A4表格,再用二分法,則所有題目都能在十分鐘內解決。

      刪除
    2. 舉兩個例子,19165219的三位尾數是219,所有的兩個四位數質數相乘之後的結果尾數是219的有1415個。

      經查,有的有1441個,有的有1424個,1437,1426,也有的會少於1400。但是始終都不會超過1500個。

      這是個有趣的現象,暫時不知道如何在數學上證明。而這個現象,對於製表是有重大意義的。因為質數戰爭是允許查表的,因此表就是你的戰術(本來想說是武器和彈藥)。因為大都在14xx而不大於1500,則每張A4紙打150個組合,就正好打滿十張。

      也就是說,質數戰爭,考驗的是參與者的製表能力,以及構思如何製表。我不需要統一玩法,只需要說明規則。因為總會有聰明人找到更強的查表及計算方法。

      刪除
    3. 更正一下,這個方法要打印100張A3表格,A4還是太小了。

      好像有種作弊的感覺……這回是真的快了……

      刪除
    4. 以 19165219 為例,需要比對 (xxx1 * xxx9), (xxx3 * xxx3), (xxx7 * xxx7) 這些組合,如果質數表有依尾數分類,解題應該可以更快

      刪除
  20. 如果只從第一位尾數開始篩選,那組合情況就太多了,估計兩個月都篩不完。

    因此我認為初始時就要知道頭數的匹配範圍和尾數的精準匹配。

    比如題目是 19165219 ,設兩個質數中,小的質數是abcd,大的質數是efgh。

    則把兩位ab和ef叫作頭數,cd和gh稱作尾數。

    查二位數乘法表,可以查到ab匹配ef的範圍。查尾數表,可以查到cd和gh的精準匹配。

    比如題目 19165219 ,當篩到ab=24時,那ef的範圍只能是[76,79]。查質數表,以24開頭的質數有{11,17,23,37…}等十個。

    以cd=23為例,則查尾數表可快速知道,gh只能等於53。

    拿到53之後,再回到質數表,發現以53為尾數的,只有77和78。

    按我以前的方法,我需要把2423*7753和2423*7853這兩種情況都算一遍才能排除,而現在的新方法是,只需要口算(第三位數)就可以排除完,或最多只剩一個。這樣一來計算量就減少了,時間就節省了。

    經過口算,這兩個數都不符合。但是假設存在7653這個質數,那它倒是能通過,這回就要進一步驗證了。這種篩到第三位數仍然沒篩掉的情況很常見,每個ab出現一兩個很正常,所以解題速度最快也只能是這樣。

    你可以拿2423*7653用計算器來算一下,發現結果的尾數是xxxxx219。

    回覆刪除
    回覆
    1. 尾數表的原理,也就是為何23只有乘以53才能得到尾數是19的結果的原理,在我寫的《費馬小定理的介紹及證明》中有詳細敘述。

      實際上三位數也可以對應,但是不太好制表,只好只做兩位數的表,再通過口算篩出第三位。

      刪除
    2. 放入你的文章連結 質數戰爭,謝謝你費心製表,閱讀後的心得:第一次玩這個遊戲(4x4)的人,除非你善於計算,很難一個小時內解題,算完一題,通常不會想再算第二題。

      刪除
    3. https://ejsoon.win/prime-war/

      刪除
    4. 閱讀後的心得:第一次玩這個遊戲(4x4)的人,除非你善於計算,很難一個小時內解題,算完一題,通常不會想再算第二題。

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

      如果用第二種方法(二分法),十分鐘左右就應該能解開了。只不過有點費紙,要打印100張三位數尾數表以及一張36縱横表。

      為了證明這一點,我現在就驗證:

      題目:45520087

      用時:17分51秒

      答案:4943*9209

      用第二種方法雖然快,反倒沒那麼好玩了。

      今日我剛拿到了我訂購的100張A3紙,我都沒有立即去玩,因為我知道這個方法肯定是行的。

      回顧我在玩質數戰爭的這十幾日,我都在不停的構思解法,制表,打印,改進表格及解法。

      最開心的是第一個真正依靠表格和筆算算出答案,證明了這個遊戲是可玩的。

      如果一個人只想獲得現成的玩法,那質數戰爭可能沒那麼好玩。而當他得知他需要自己去鑽研解法,自己去制表,打印,拿自己設計的方法去參賽,這個過程才是真正的「好玩」。

      想起了以前電視上的一個遊戲,機器人大戰,參賽的是大陸全國各個大學的學生代表,比賽目標是用遙控機器人把己方的球佔據指定位置的筒。

      這個遊戲就不會去規定你如何製作機器人,用何方法把球弄進直筒裏。我覺的這個節目特別精彩,會見到很多意想不到的機械結構去實現同一個目標。

      如果我在現實生活中能找到一個願意跟我玩質數戰爭的人,我會跟他說:給你一週時間準備好你自己的表格和解法,一週後我們來一決勝負。是這樣玩,而不是說邀請多方參賽人員,然後告知他們玩法,之後看誰手速快,算的快,失誤少,不看這個,看的是你能找到甚麼辦法,以及做出甚麼樣的表格。

      刪除

    5. 現在的課題是,雖然第二種方法(二分法)很快,但是太過費紙。如果比賽規則裏加入對表格數量的限制,則這個方法就廢了。

      有沒有辦法進一步壓縮文本?有沒有一種適合於手工解壓的文本壓縮算法?我相信是有的。

      這樣一來,質數戰爭至少有兩個流派,一是「頭尾計算派」,二是「二分壓縮派」,都很強,不敢說誰一定最厲害。

      目前為止,我還不知道壓縮算法要怎麼弄。這正是遊戲本身最煩人也最吸引人的地方。充滿不確定性,挑戰性,要冒失敗的風險(可能最終找不到適合於手工解壓的文本壓縮算法),這才是真正的好玩。

      我在幾個月前,在一個數學論壇上,跟幾個高手,也在玩這樣的一種「不確定性數學遊戲」,課題是,有沒有一種圖形,含有廿四個正方形,且同時含有廿四個三角形,並且是軸對稱及旋轉90度對稱。

      這個課題我們幾個人狂熱了一兩個月,每當有「新發現」內心狂喜,發出去之後,看見別人也發來他的新創意,也非常精彩。參與這個開放遊戲,我真的感到開心。

      現在質數戰爭也是這樣的一種開放遊戲,只不過除了數學能力之外,製表能力也是一個考驗。現在又懂數學又懂製表的人還是太少了,但是問題不大,因為可以學習研究啊!

      我也不是製表高手,真正的高手是要懂latex製表的。而我的製表方法是js生成table,然後在瀏覽器上按ctrl+p打印……

      刪除
    6. 我認同這款遊戲如果能以自製表格來對戰是最好的玩法之一,最能展現該隊創意與解題能力,可惜它要花非常多時間製表。

      基本上,個人偏好頭尾計算這一派,可是想到要花時間製表就謝謝再聯絡,主要是有其它更有趣更值得我花時間的事要執行,也許提早二三十年前,我會陪你同玩。

      我可以體會你在玩質數戰爭那種創作的心情,因為現在個人正在創建橋牌簡明叫牌制,期望設計一個規則簡單,使用最少特約的制度,讓同伴最不容易產生誤解,既使十幾年沒玩牌,一玩就可以馬上上手,會想辦法把它推廣到全世界。

      關於物件旋轉,有一篇文章提供你參考,旋轉碰碰棋

      刪除
    7. 質數戰爭這個「遊戲」的設計可能還是存在漏洞,尤其是我找到了第二種方法之後。如果對戰兩方都用我的第二種方法,那就沒意思了。但是如果規定只能用第一種方法,某些題目確實又要找很久。

      不過我之所以樂此不疲,原因是我起初並不確定單用紙筆是否真的能找到兩個質數。後來證明可以之後,就開始考慮如何簡化算法。我曾經在半夜一點之後,算了一個半小時,最終得到了答案。就好像在一個黑暗隧道中尋寶一樣,當真的找到答案,那一刻是最開心的。也出現過幾次探到最後沒找出來的情況,之後只好去網上找工具質因數分解,然後再回去找草稿上算錯的地方,這也是一個改進的契機。

      總之「質數戰爭」是我設計的第一個關於加密和解密的遊戲,也是我目前為止見過的唯一一個以加密和解密為數學模型的遊戲,可以歸入「紙筆遊戲」的範疇。

      「碰碰棋」跟我原創設計的「我為歌狂」相似,我是覺的「我為歌狂」更好玩一些,因為雙方有競爭,元素也更為多樣。

      刪除
    8. 關於加密解密遊戲,如果能簡化改進成純查表加上簡單心算,才能更加普及大眾。

      刪除
    9. 你的意思是去掉草稿紙和筆算,只用到眼睛和大腦?

      現在經過簡化和標準化之後,玩家可以在不了解原理的情況下,只用到查表,加法和減法,就能篩到正解。

      我確實有研究過,對於四位數的加減法,只用到最多十二個立方體,即可代替紙筆。一個立方體可以表示0〜9,後面有機會再介紹。

      我曾經設計過一個遊戲,遊戲的幾方是帶錢旅行的,而當時的「錢」,是用算盤來表示的。

      去年至今年初,我因為非常喜歡「數塔」這個電子遊戲,於是我打算把它實物化。用到了7x7個立方體,以及多個五邊形、正三角形木片。

      經過實測,「是否用草稿紙」並不是一個能增加遊戲樂趣的方式。有些益智遊戲還擺脫不了電子産品。比如「數塔」即使能完全實物化,但是生成題目還是靠程式。再如breaklock,只能用手機玩。

      那麼完全不用電子也不用草稿紙的燒腦遊戲有沒有呢?是有的,多聯方形及多聯鑽石就是。

      對於質數戰爭而言,它是一個數字加密和解密遊戲,我需要考慮如何玩會更方便。假設玩家認為拿立方體替代紙筆計算能算的更快,那他完全可以自己去準備。據我實測,紙筆快多了。

      質數戰爭作為一個遊戲,它就是這樣玩的。需要用掉一些A4紙,現在一題可能只用到一張A4單面就足夠了。紙筆遊戲,就是要用到紙和筆的。

      刪除
    10. 是的,最好能簡化到查表以及一位數加減乘除就可以玩的遊戲,數學的原理完全隱藏,主要是讓十歲的小朋友也能參與遊戲。

      基本原理:
      (要傳送的數字、自己的私人密碼、接收者公開的數值) 混和運算 = 加密數值
      (加密數值、接收者的私人密碼、傳送者公開的數值) 混和運算 = 原始傳送值
      第三者(其他人)來破解原始傳送值(0~9)

      刪除
    11. 十歲小朋友玩的話,我想到了一個改版:
      主持人拿兩個二位數質數相乘,將乘積公開,參與小朋友搶答,答對者得分。
      現在小朋友很聰明的,二位數乘法心算不是問題。

      二位數質數一共只有21個:(account are 21)
      11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97,


      至於你後面談到的基本原理:
      (要傳送的數字、自己的私人密碼、接收者公開的數值) 混和運算 = 加密數值
      (加密數值、接收者的私人密碼、傳送者公開的數值) 混和運算 = 原始傳送值
      第三者(其他人)來破解原始傳送值(0~9)
      ---------
      這個設想初步來看並不是很好實現,也不太好玩。如果A通過rsa加密傳給B,那C又如何能破解呢?rsa加密很難筆算的,幾乎不可能筆算。再者,C如果破解了,那會帶給大家歡樂嗎?

      刪除
    12. 這款叫《無良商人》的桌遊跟你描述的遊戲可能有點像:

      https://m.youtube.com/watch?v=teU9FROjxIE

      當一個商人在使用黑心原料時(相當於加密傳輸中),如果沒有受到質疑,則他就得逞了。感覺是一款很對小孩子味口的遊戲。也可以多人一起玩。

      刪除
    13. 無良商人比較娛樂,適度欺敵取勝,有些運氣,不過我所想的駭客任務,比較學術性,隨機傳送 0~9,一次一碼,等於有十次猜碼的機會,希望傳送七八碼後,可以完全解出所有的數碼。

      刪除
    14. 那就等你有空把完整規則設計出來之後,我們再來評判,是否既跟數學學術沾邊,又能給十歲左右的小朋友玩的開心。祝你成功!

      刪除
    15. 謝謝勉勵,盡力而為。

      刪除