ETH官方钱包

切換
舊版
前往
大廳
主題

ZeroJudge - b901: 7. 森林呼喚 解題心得

Not In My Back Yard | 2018-12-25 23:51:40 | 巴幣 0 | 人氣 172

題目連結:


題目大意:
給定「5」這個數字,代表接下來有 5 個數字。對於每個非負整數 N ( N ≦ 10 ^ 15 ),求 N! 第一位非零的尾數為何?



範例輸入:
範例輸入一:
5
0
2
3
4
5

範例輸入二:
5
6
7
8
9
10

範例輸入三:
5
123456789
987654321
135792468
864297531
999999999



範例輸出:
範例輸出一:
1
2
6
4
2

範例輸出二:
2
4
2
8
8

範例輸出三:
8
6
6
2
4



解題思維:
首先因為我們是要求末非零尾數,因此我們的 N! = 1 × 2 × …… × N 可以寫成
(4 × 5) × (4 × 10) × (4 × 15)……
因為 1 × 2 × 3 × 4 = 24 ,尾數為 4 ; 6 × 7 × 8 × 9 = 3024 ,尾數為 4 。

然後我們可以統計一下上式有多少 5 的倍數,即為 N ÷ 5 = x 餘 y。所以可以將上式改寫為 (4^ x) × (5 ^ x) × (x?。?× (y?。?。(其實就是把 4、5 的因數挑出來)

而因為我們是要求非零尾數,因此 (4^ x) × (5 ^ x) 會產生 x 個 0 ,可以忽略、簡化成 (2 ^ x)。

因此我們得到 N 的非零尾數之遞迴式:
當 N 是 5 的倍數,則答案為((N ÷ 5)! 的非零尾數) × (2 ^ N 的個位數);
若否,則為(N-1)! 的非零尾數 × N。

而當 N 降到 4 以下,可直接求出 N! 的值。且 2 ^ N 的個位數以每 4 組一循環,2 → 4 → 8 → 6 → 2 ……

以 17! 為例,非零尾數可由以下程序算出:
17 × 16 × (15!的尾數)
→ 7 × 6 × (3!的非零尾數) ×  8(15 除以 4 的餘數為 3,所以2 ^ 15次方之個位數為8)
→ 6 × (6) → 36 → 6,因此答案就是 6 。

此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

相關創作

更多創作