优秀的编程知识分享平台

网站首页 > 技术文章 正文

【神奇的数字7】

nanyue 2025-01-18 22:57:28 技术文章 1 ℃

1 余数的表达式

任意一个整数被 7 除以后的结果(商),可以除尽时只有整数,余数为 0。不能除尽则存在余数(范围1~6)。

先看一下余数用7除以后的数据:

1/7 = 0.142857

2/7 = 0.285714

3/7 = 0.428571

4/7 = 0.571428

5/7 = 0.714285

6/7 = 0.857142

其实,上述结果只是近似值。余数用小数点表示, 应该是 0.142857 的周期性的无限循环的。设:

a = 0.142857(余数1产生的一段小数)

q = 10^(-6)(循环周期)

k = 1,2,3,4……,直至无穷大, 表示a的周期性循环次数。

s 是任意一个整数被 7 除后的余数用小数点表示的精确值,则

s = a*(1+q +q^2+q^3+……+q^k)①

s*q = a*{q +q^2+q^3+……+q^(k+1)}②

①-②,

s*(1-q)= a*{1-q^(k+1)}

所以

…………………………………

s = a*{1-q^(k+1)}/(1-q)

…………………………………

这就是任意一个整数被 7 除后,余数为 1 产生的小数部分,近似值向精确值逼近表示的表达式。显然 k 越大越精确,根据计算精确度需要选定。

例如:

某个整数被7除以后余数是1,代入公式,它的余数被7除用小数点表示k次循环近似值:

k = 0

s = a*{1-q^(0+1)}/(1-q)

= a*{1-q^(1)}/(1-q)

= a

= 0.142857

k = 1

s = a*{1-q^(k+1)}/(1-q)

= a*{1-q^(1+1)}/(1-q)

= a*{1-q^2}/(1-q)

= a*{1+q}

= 0.142857*{1+10^(-6)}

= 0.142857142857

k = 2

s = a*{1-q^(k+1)}/(1-q)

= a*{1-q^(2+1)}/(1-q)

= a*{1-q^3}/(1-q)

= a*{1+q+q^2}

=0.142857*{1+10^(-6)+10^(-12)}

= 0.142857142857142857

……

还可以得到:

…………………………………

s =n* a*{1-q^(k+1)}/(1-q)

n = 1,2,3……6(任意整数被 7除以后产生的余数)

…………………………………

这就是任意一个整数被 7 除后,余数为 n产生的小数部分,近似值向精确值逼近表示的表达式。

2 某整数(仅1个有效数)含7个数与余数

某个整数含7的个数,即某个整数用7除以后产生的商整数部分。

从仅有1个数,右边都是0的某整数开始。

10有1个

100有14个

1000有142个

1万有1428个

10万有14285个

100万有142857个

1000万有1428571个

1个亿有14285714个

这种整数含7的个数:

1)其位数与这种整数含0的个数相同。

2)含7的个数总出现142857(独缺369)周期性无限循环。达到位数就截断。

3)怎么算出余数:

只需要看含7的个数最末位(最右边数字)与7相乘的结果的末位数,它的互补数就是余数(范围1~6)。

例如1000含7的个数142。142末位数2,则1000内被7除尽最大值末位数2*7=14,取14末位数4,则余数是6,详见图1。

实际上,某个整数位数相同的可能数字有1~9,它们含7的个数与余数,本文以10000~90000为例,详见图2。

有什么规律?

1)其位数与这种整数含0的个数相同。

2)含7的个数的起始位的数字从1~6依次序为1,2(缺3)4,5(缺6)7,8。(图2在数字的下方用→标识),然后从某位开始142857的逆时针循环,达到位数就截断。

3)70000含7的个数是10000,这样80000可看作10000,90000看作20000。但要记得在7的个数最左边加1。即:

10000有1428个7

80000有11428个7

90000有12857个7

3 某整数(不只1个有效数)含7个数与余数

可拆分成若干仅1个有效位的。最末3位,不拆分直接用心算处理。

例如,

1)整数30620拆分成

30000+620

30000有4285个7,余数5加到末3位620成625,含89个7,余数2。

于是30620含(4285+89)个7,余数2。

验算(4285+89)*7+2 = 30620

2)整数60561拆分成

60000+561

60000含8571个7,余数3加到末3位561成564,含80个7,余数4。

于是60561含(8571+80)个7,余数4。

验算(8571+80)*7+4 = 60561

3)如果仅需求最大被7整除的数,则很容易。例如,

30620只需知道30000被7除的商最后1位数是5,因而余数是5,加到620成625,被7除以后余数是2。所以30620最大被7整除的数是:

30620-2 = 30618

验算:30618/7 = 4374,余数0

60561只需知道60000被7除的商最后1位数是1,因而余数是3,加到561成564,被7除以后余数是4。所以60561最大被7整除的数是:

60561-4 = 60557

验算:60557/7 = 8651,余数0

31620 = 30000+1000+620

30000余数5,1000余数6,620+5+6=631

余数1

31620-1 = 31619

验算:31619/7 = 4517,余数0

(本文为原创)



Tags:

最近发表
标签列表