1×2×3×4×…×2010×2011乘积是一个多位数,而且末尾有许多零,从右到左第一个不等于零的数是多少
2011!结果从右到左第一个不等于零的数是4。
我用EXCEL的VBA程序计算2011!,结果 是5771位的数字,从右到左第一个不等于零的数是4。程序如下:
Sub 宏1()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
m = 1 '从1起乘
n = 2011 'n阶乘
w = 722 '5771 / 8 '预算结果8位数需用单元格数
j = 2 '从第二行,乘下一个数
Cells(1, w) = m '放置基数
Do While j <= n '
For i = w To 1 Step -1
Cells(j, i) = Cells(j - 1, i) * j
Next
For i = w To 2 Step -1
a = Int(Cells(j, i) / 100000000)
b = Cells(j, i) - a * 100000000
Cells(j, i) = b
Cells(j, i - 1) = Cells(j, i - 1) + a
Next
j = j + 1
Loop
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
可计算出最后 一个非0的数是4。下面是2011!的全部5771位数字:
首先说一下正确答案:编程进行大整数计算的结果,2011!的尾部从右到左第一个非零数字是4。
不能只考虑个位数字相乘,必须考虑5^n数所消耗掉的n个2因子。也就是说,不能从每一组1到10相乘所得末尾非零数字的201次方来计算2011!的末尾非零数字,这样做肯定是错误的。
分步分析计算:
第一步,计算每10个数中2和5以外因子的个位数乘积的个位数字
1到2010中,每一组个十两位从01到10,2和5以外的因子的个位数乘积为 3*3*7*9=567,个位数字是7。一共有2010/10=201组。
第二步,计算2和5的因子数量,确定剩余的2因子数量
1到2011中,5的因子数量为:
5的倍数,2011/5=402.2=402个,取整数部分,下同;
25的倍数,2011/25=80.44=80个;125的倍数,2011/125=16.088=16个;625的倍数,2011/625=3.2176=3个;合计,402+80+16+3=501个。
同理,1到2011中,2因子的数量为:
2的倍数,2011/2=1005个;4的倍数,2011/4=502个;8的倍数,2011/8=251个;16的倍数,2011/16=125个;32的倍数,2011/32=62个;64的倍数,2011/64=31个;128的倍数,2011/128=15个;256的倍数,2011/256=7个;512的倍数,2011/512=3个;1024的倍数,2011/1024=1个;合计,1005+502+251+125+62+31+15+7+3+1=2002个。
与5相乘生成尾部0之外,还剩余 2002-501=1501个2 因子。
第三步,计算2011!尾部第一个非零数字
2011不含2因子或5因子,其个位数字为1。
因此,2011!尾部非零数字,等价于 7^201*2^1501*1 的个位数字。
运用余数定理:
7^4 mod 10 = 2401 mod 10 = 1,
7^201 mod 10
= [ (7^4)^50*7 ] mod 10
= 7 mod 10
= 7;
2^5 mod 10 = 32 mod 10 = 2,
2^25 mod 10 = 2^5 mod 10 = 2,
2^1501 mod 10
= [ (2^25)^60*2 ] mod 10
= [ (2^5)^12*2 ] mod 10
= [ (2^5)^2*2^3 ] mod 10
= 2^5 mod 10
= 2
所以,(7^201*2^1501*1) mod 10
= (7*2*1) mod 10
= 4
结论,2011! 的尾部从右到左第一个非零数字是4。
2011!结果从右到左第一个不等于零的数是4。
我用EXCEL的VBA程序计算2011!,结果 是5771位的数字,从右到左第一个不等于零的数是4。程序如下:
Sub 宏1()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
m = 1 '从1起乘
n = 2011 'n阶乘
w = 722 '5771 / 8 '预算结果8位数需用单元格数
j = 2 '从第二行,乘下一个数
Cells(1, w) = m '放置基数
Do While j<= n '
For i = w To 1 Step -1
Cells(j, i) = Cells(j - 1, i) * j
Next
For i = w To 2 Step -1
a = Int(Cells(j, i) / 100000000)
b = Cells(j, i) - a * 100000000
Cells(j, i) = b
Cells(j, i - 1) = Cells(j, i - 1) + a
Next
j = j + 1
Loop
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
可计算出最后 一个非0的数是4。下面是2011!的全部5771位数字:
末位是"1"的共有202个;
末位是"2"的共有201个;
末位是"3"的共有201个;
末位是"4"的共有201个;
末位是"5"的共有201个;
末位是"6"的共有201个;
末位是"7"的共有201个;
末位是"8"的共有201个;
末位是"9"的共有201个;
其中“1”的不影响;
"2”和"5"的可抵消;
则该结果与(3×4×6×7×8×9)^201的末位数相等。
因为3×4×6×7×8×9=36288
所以上述结果与8^201的末位数相等。
设y为8^x的末位数,
则有
y=8(x=4n+1)
y=4(x=4n+2) n∈Z
y=2(x=4n+3)
y=6(x=4n)
因为201=4×50+1
所以8^201的末位数是8
所以从右到左第一个不等于零的数是8.
法2.个位1*2*3*4*5*6*7*8*9 是8 1个
十位(10个1*2*3*4*5*6*7*8*9) 是8 10个
百位 (100个1*2*3*4*5*6*7*8*9) 是8 100个
千位(1000-2000) 是8 200个
2001-2012相乘不是0第一个是6
6乘以多少个8都是8所以所以从右到左第一个不等于零的数是8.
402 ÷ 5 = 80 ... ... 2
80 ÷ 5 = 16
16 ÷ 5 = 3 ... ... 1
402 + 80 + 16 + 3 = 501(个)
1×2×3×4×…×2010×2011乘积是一个多位数,末尾有 501 个零