跳到主要内容

古怪脑洞|中国古人没有数字咋算乘除🤔

古怪问题研究中心

访问小组归档于 5/16/2025, 2:25:02 PM

古怪脑洞|中国古人没有数字咋算乘除🤔

阿拉伯数字13世纪才进入我国 在此之前我国数学发展也都很好 但是是怎么进行计算的呢

非常好奇 因为网络上有说用算盘算加减 但是乘除就要用上乘法口诀了

了解到了!!"九九乘法表是数学中的乘法口诀,别名有九九歌,产生年代是春秋战国。出自《算法大成》 刚刚百度的" 引自评论

默认乘法口诀是跟随阿拉伯数字进来的了!真是一大思维禁锢啊 将数字和乘算配套了

不知算不算九漏鱼 如果违反组规的话请管理员自行删除吧!🙏

Fisherchenxi · 2023-08-24 · 17:11:20 江苏👍 9
  1. 算盘(机)是图灵完备的,理论上来说,人和一个有无限算珠和档的算盘可以计算任何计算机可以计算的函数。自然,算盘是可以算乘法的。我不了解古代的具体情况,不过有可能一部分乘法是这么运算的。
  2. 古代有算筹,用算筹算乘法和用十进制数差不多。所以这个问题的答案可能是:「用算筹算」
  3. 其实,拿汉字算肯定是可以的。下面我着重说一下这个部分。

汉字表示的数可以看作一个字符串 s,"零","一","四十八",...... 乘法记作 mul,加法记作 add. 我们说,一个自然数的前驱是直觉可计算的,前驱的定义是

pred(x) = x - 1, x > 0 pred(0) = 0

汉字自然数上的 pred 显然可以算。pred("四十") = "三十九"

类似地,可以定义后继 succ,succ(x) = x + 1.

有这两个函数,就可以用递归函数定义乘法:

mul("零", x) = "零" mul(x, y) = add(y, mul(pred(x), y))

add("零", x) = x add(x, y) = succ(add(pred(x), y)))

下面我演示一下如何算 mul("三","二"):

mul("三","二") = add("二", mul(pred("三"), "二"))) = add("二", mul("二", "二"))) = add("二", add("二", mul(pred("二"), "二")))) = add("二", add("二", mul("一", "二")))) = add("二", add("二", add("二", mul(pred("一"), "二")))) = add("二", add("二", add("二", mul(pred("一"), "二")))) = add("二", add("二", add("二", "零"))) = ...... = succ(succ(succ(succ(succ(succ("零")))))) = succ(succ(succ(succ(succ("一"))))) = ..... = "六"

可以看到,只要我们会递归和数数(往前数一个的 pred, 和往后数一个的 succ),那么就能这么算乘法。为什么古人不这么算呢?显然,这个算法的效率是非常之差的,需求的时间和空间都是十进制加法的指数级。