嘘~ 正在从服务器偷取页面 . . .

SP2124 FCTRL4 - Last Non-Zero Digit of Factorials 题解


SP2124 FCTRL4 - Last Non-Zero Digit of Factorials 题解

题目链接:FCTRL4 - Last Non-Zero Digit of Factorials

题意

多组数据,每次给出一个正整数 $n(n \le 10^{100})$ ,求 $n!$ 最后一位非零数字。

例如 $5! = 1\times 2 \times 3 \times 4 \times 5 = 120$ ,它的最后一位非零数字是 $2$ 。

好像我是这题代码最短的,只有 202B 。

记 $a = \left\lfloor\frac{n}{5}\right\rfloor,~b = n - 5\times \left\lfloor\frac{n}{5}\right\rfloor$ ,并记 $L(n)$ 为 $n!$ 最后一位非 $0$ 数字,则

由于 $2^a$ 的个位数等于 $2^{a \bmod 4}$ ,并且 $6$ 乘以任何偶数 $x$ 都不改变 $x$ 的个位数,故

时间复杂度 $\mathcal{O}(100\times \log_5 n)$

代码:(懒得写高精度了

import sys

p = lambda x: [1, 2, 4, 8][x % 4]

def L(n):
	if n < 5:
		return [1, 1, 2, 6, 4][n]
	return p(n // 5) * L(n // 5) * L(n % 5) % 10

for b in sys.stdin.readlines():
	print(L((int)(b.strip())))

参考文献

[1] https://www.youtube.com/watch?v=RmENut3ZmnM

[2] https://www.luogu.com.cn/article/i75zelbh


题外话

怎么 2020 年的时候交了这么多发暴力?

另外这道题应该是目前写过最短的 省选/NOI− 了吧。


文章作者: q779
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明来源 q779 !
评论
  目录