第32回  問題 (9月6日〜10月4日) 

1から100までの整数を全部かけたときに1の位から順に0の個数はいくら続くでしょうか。また 初めて0でない
数字が出てきたときにその数字はいくらでしょうか。

たとえば 1234567890000となったとしたら答は4,9となります。


解答(答が小学生向きでありません)(

24個 4

解1
1〜100までの積をAとします。
A=(1×2×3×4×6×7×8×9)×(11×12×13×14×16×17×…×19)×(21×…29)…(91×99)
  ×5^16(1×2×3×4×6×7×8×9×11×12×…×19)
  ×25^4(1×2×3×4)

より A/(5^24)=(1×2×3×4×6×7×8×9)^11×(1×2×3×4)
         =6^11×4  (mod 10)
         =4   (mod 10)
  一方   2^24=6 (mod10)

求めるのはB=A/(5^24)÷(2^24)の1の位なのですが
Bに2^24(1の位は6)をかけた1の位が4になるのですから
Bが偶数であることはあきらか(かける2の数が多い)なので
Bの1の位が2,4,6,8であり これに2^24をかけた1の位が2,4,6,8であるから
Bの1の位は4となります。

解2
次の表の数字すべてをかけることになります

1   2  3  4  5△   6  7  8 9  10○
11 12 13 14 15△  16 17 18 19 20○●
21 22 23 24 25△△ 26 27 28 29 30 ○
31 32 33 34 35△  36 37 38 39 40 ○●●
41 42 43 44 45△  46 47 48 49 50○△
51 52 53 54 55△  56 57 58 59 60○●
61 62 63 64 65△  66 67 68 69 70 ○
71 72 73 74 75△△ 76 77 78 79 80○●●●
81 82 83 84 85△  86 87 88 89 90○
91 92 93 94 95△  96 97 98 99 100○○

上の表の数を素因数分解して
△の数からは5を抜き取り ○のところからは10を抜き取り さらに●のところからは2を抜き取る

1   2  3  4  1   6  7  8 9  1
11 12 13 14  3  16 17 18 19 1
21 22 23 24  1  26 27 28 29 3
31 32 33 34  7  36 37 38 39 1
41 42 43 44  9  46 47 48 49 1
51 52 53 54 11  56 57 58 59 3
61 62 63 64 13  66 67 68 69 7
71 72 73 74  3  76 77 78 79 1
81 82 83 84 17  86 87 88 89 9
91 92 93 94 19  96 97 98 99 1       ×5^6×10^18

10の倍数にするために表のなかからさらに64=2^6を抜いて
1   2  3  4  1   6  7  8 9  1
11 12 13 14  3  16 17 18 19 1
21 22 23 24  1  26 27 28 29 3
31 32 33 34  7  36 37 38 39 1
41 42 43 44  9  46 47 48 49 1
51 52 53 54 11  56 57 58 59 3
61 62 63    13  66 67 68 69 7
71 72 73 74  3  76 77 78 79 1
81 82 83 84 17  86 87 88 89 9
91 92 93 94 19  96 97 98 99 1       ×10^24

この表のすべての積の 1の位に着目すればいいことになります

1×2×3×6×7×8×9=4 なので 横に1,2,3,6,7,8,9をセットにしてかけることにする
1の位の数は  10を法として
4^10×4^9×(3×7×9×3×3×7×9)×(3×3×7×9)
     ↑4の段の残った数  ↑5の段の残った数  ↑10の段の残った数
=6^5×6^4×4×3×7    (4^2=6)
=6×4×3×7      (6は何回かけても6)
=4

解3(浜田 明巳さん)

次の2通りのエクセルのマクロで解きました.0は24個,初めての0以外の数は4です.
Option Explicit
Sub Macro1()
Sheets("Sheet1").Select
Range("A1").Select
Dim a(256) As Integer
Dim j As Integer
Dim jj As Integer
a(0) = 1
a(1) = 1
For j = 2 To 256
a(j) = 0
Next j
For j = 1 To 100
For jj = 1 To a(0)
a(jj) = a(jj) * j
Next jj
jj = 1
While jj <= a(0)
If a(jj) >= 10 Then
a(jj + 1) = a(jj + 1) + a(jj) \ 10
a(jj) = a(jj) Mod 10
If jj = a(0) Then
a(0) = a(0) + 1
End If
End If
jj = jj + 1
Wend
For jj = 1 To a(0)
Cells(1, a(0) - jj + 1).Value = a(jj)
Next jj
Next j
j = 1
jj = 0
While j <= a(0) And jj = 0
If a(j) = 0 Then
j = j + 1
Else
jj = 1
Cells(2, 1).Value = j - 1
Cells(2, 2).Value = a(j)
End If
Wend
Range("A2").Select
End Sub
Sub Macro2()
Dim a(1) As Integer
Dim j1 As Integer
Dim j2 As Integer
Dim j3 As Integer
Dim j4 As Integer
Dim j5 As Integer
For j1 = 0 To 1
a(j1) = 0
Next j1
j5 = 1
For j1 = 1 To 100
For j2 = 0 To 1
j3 = j1
j4 = -2 * (j2 = 0) - 5 * (j2 = 1)
While j3 Mod j4 = 0
j3 = j3 / j4
a(j2) = a(j2) + 1
Wend
Next j2
j5 = (j5 * j3) Mod 10
Next j1
MsgBox "0の個数=" + Str(Application.Min(a(0), a(1))) + ", 初めての0以外の数=" + Str(j5), vbOKOnly
End Sub