【发布时间】:2013-02-19 05:24:42
【问题描述】:
不久前,我在数学论坛上看到一个问题,有人在讨论一遍又一遍地将数字中的数字相加,直到得到一个数字。 (即“362”将变为“3+6+2”,将变为“11”......然后“11”将变为“1+1”将变为“2”,因此“362”将返回 2......我写了一些很好的代码来得到这个答案并发布它只是被一个用户超越,他建议模9中的任何数字都等于这个“无限数字和”,我检查了它,他是对的......好吧几乎正确,如果返回零,您必须用“9”将其切换出来,但这是一个非常快速的解决方案......
362 = 3+6+2 = 11 = 1+1 = 2
或者...
362%9 = 2
Anways,mod9 方法非常适合无限添加数字的总和,直到你只剩下一个数字......但是只做一次呢(即 362 只会返回“11”)......谁能想到快速算法?
【问题讨论】:
-
出于好奇 - 是否提供了关于
%9为何有效的解释? -
@Dukeling 不,我认为这与我们处于以 10 为基数的数字系统中这一事实有关,这是
place之前的最高个位数(例如十位,数百个位置等)重置...在以 6 为基数的数字系统中,我认为这适用于模 5。 -
可能是一个简单的迭代 - 继续取商和余数除以十,将余数相加并将商作为值以在下一次迭代中检查,并在商为零时停止。跨度>
-
@Dukeling:对于任何整数 k,10^k mod 9 == 1。所以对于整数 d1, d2, ... 和 e1, e2, ...,我们有 d1*10^e1 + d2*10^e2 + ... mod 9 = d1*10^e1 mod 9 + d2*10 *e2 mod 9 ... = d1*1 mod 9 + d2*1 mod 9 + ... = d1 + d2 + ... mod 9。这里,d1...是数字的数字,而e1。 .. 是对应于每个数字位置的 10 的指数。 10和9没什么特别的;它适用于任何基数 b 和相应的模数 b-1。
-
@AlbertRenshaw:你猜对了。更严格地说,基数
b(b > 2) 中的数字N就是Sum[exp=0..inf](digit*b^exp),我们知道b^exp mod (b - 1) = 1,因此N mod (b - 1) = Sum[exp=0..inf](digit) mod (b - 1)。
标签: algorithm math sum iteration digit