标题: 给大家介绍一个速算法
性别:男-离线 周瑜

栎阳侯谏议大夫

Rank: 16
组别 翰林学士
级别 征西将军
好贴 10
功绩 943
帖子 4717
编号 1808
注册 2003-11-3
家族 瓦岗寨


发表于 2010-7-28 00:49 资料 主页 文集 短消息 看全部作者
刚刚试了一下,这个算式无口诀硬乘大约五秒。颖颖一秒以内算出来真是太牛了。

不过现在老了,没心思也没必要再学新的速算法了。现有速算能力也足够应付日常生活工作中大部分计算,复杂一点的就动用计算器好了。

[ 本帖最后由 周瑜 于 2010-7-27 12:52 编辑 ]


顶部
性别:男-离线 周瑜

栎阳侯谏议大夫

Rank: 16
组别 翰林学士
级别 征西将军
好贴 10
功绩 943
帖子 4717
编号 1808
注册 2003-11-3
家族 瓦岗寨


发表于 2010-7-28 10:26 资料 主页 文集 短消息 看全部作者
回复 #10 dimeterio 的帖子

与输入法类似,学习速算法通常是在小时候,一经学会,终生受益。而小时候省下的100小时,并没有太大作用。

速算还可以培养一种数字敏感性,在送进计算机之前,通过自己大脑对输入数据进行预处理,判断向哪个方向努力有可能得到正确结果。


顶部
性别:男-离线 周瑜

栎阳侯谏议大夫

Rank: 16
组别 翰林学士
级别 征西将军
好贴 10
功绩 943
帖子 4717
编号 1808
注册 2003-11-3
家族 瓦岗寨


发表于 2010-7-28 20:26 资料 主页 文集 短消息 看全部作者
回复 #1 颖颖 的帖子

这题等价为:
今有数四千余,九九数之余三,十十数之余二,十一数之不足一,问物几何。

本法优点:
易对9、10、11取余
易求550、-99、540的乘积
990接近1000,易于确定范围和求加法

想了一圈,还真没找到更合适的三个数。
顶部
性别:男-离线 周瑜

栎阳侯谏议大夫

Rank: 16
组别 翰林学士
级别 征西将军
好贴 10
功绩 943
帖子 4717
编号 1808
注册 2003-11-3
家族 瓦岗寨


发表于 2010-7-29 06:22 资料 主页 文集 短消息 看全部作者
回复 #22 颖颖 的帖子

当然知道9, 10, 11两两互素,就像550除以9余1,-99除以10余1,540除以11余1也不用特别说明。

上面那帖,我论述的是使用这三个数计算乘积快速方便的原因,而其正确性,自然是无需再说了。
顶部
性别:男-离线 周瑜

栎阳侯谏议大夫

Rank: 16
组别 翰林学士
级别 征西将军
好贴 10
功绩 943
帖子 4717
编号 1808
注册 2003-11-3
家族 瓦岗寨


发表于 2010-7-29 11:05 资料 主页 文集 短消息 看全部作者
借地科普,中国剩余定理。
某数 x,除以两两互质的一组数 m1, m2, ..., mn,余数分别为 a1, a2, ..., an,求x。

为了求 x,需要引入一组数 b1, b2, ..., bn,满足以下条件:
① 当 i ≠ j 时,bi ≡ 0 (mod mj)
② 当 i = j 时,bi ≡ 1 (mod mj)
此时 x 可以容易的给出:
③ x ≡ a1b1+ a2b2+ ... + anbn (mod ∏mi)
或者
③ x = a1b1+ a2b2+ ... + anbn + k∏mi,其中 k 可以取任意整数。

那么如何求 bi 呢,请看下面这个例子。
三人同行七十稀,五树梅花廿一枝,七子团圆正半月,除百零五便得知。
在这个例子中,a1 = 3,a2 = 5, a3 = 7,b1 = 70,b2 = 21,b3 = 15。由此得知,bi 一定是除了 ai 外其余所有 a 值乘积的倍数。

令 ri = m1m2...m[i-1]m[i+1]...mn,则必有 ri 和 mi 互质,方程 ciri + dimi = 1 一定有整数解。然后令 bi = ciri,则 bi 必定满足上述①②两式。

问题至此,转化为已知互质的 r 和 m,如何求方程 cr + dm = 1的整数解。此时可用欧几里德扩展算法。

欧几里德定理,也叫辗转相除法,可用于计算两个正整数,r 和 m 的最大公约数 gcd(r, m)。此处gcd(r, m) = 1。
欧几里德扩展算法,在计算最大公约数的每一步记录系数,得到由 r 和 m 组合出 gcd(r, m) 的线性组合系数。即在等式 cr + dm = gcd(r, m) 中,不但求出 gcd(r, m),还求出了 c 和 d。

例如,r = 23,m = 120
23*0 + 120*1 = 120
23*1 + 120*0 = 23
23*(-5) + 120*1 = 5
23*21 + 120*(-4) = 3
23*(-26) + 120*5 = 2
23*47 + 120*(-9) = 1
至此完成,得到 c = 47,d = -9。

此处 bi = ci*ri = 1081,然后逐次求出所有 bi,再根据③式即可求出 x 。
顶部

正在浏览此帖的会员 - 共 1 人在线




当前时区 GMT+8, 现在时间是 2025-8-29 10:12
京ICP备2023018092号 轩辕春秋 2003-2023 www.xycq.org.cn

Powered by Discuz! 5.0.0 2001-2006 Comsenz Inc.
Processed in 0.010580 second(s), 9 queries , Gzip enabled

清除 Cookies - 联系我们 - 轩辕春秋 - Archiver - WAP