2021-05-16:时间复杂度必须是logN,如何求阶乘从右向左第一个不为零的数?
2021-05-16:时间复杂度必须是logN,如何求阶乘从右向左第一个不为零的数?
福大大 答案2021-05-16:
这道题logN的解法是大步小步法,网上非常难找。另外论代码简洁度,明显是我的代码最简洁。你看了代码后,你会非常失望。因为你苦思冥想都想不出来的问题,原来这么简单。
假设数字是N。
1.当N能被5整除时,采用大步法。N变成N/5。
1.1.当N被4整除时。当N=20时,f(20)=f(4)。
1.2.当N被4整除余1时。当N=5时,f(5)=2f(1)。
1.3.当N被4整除余2时。当N=10时,f(10)=4f(2)。
1.4.当N被4整除余3时。当N=15时,f(15)=8f(3)。
综合上述4种情况。f(N)=【2的(N&3)次方】f(N/5)。
2.当N不能被5整除时,采用小步法。N变成N-1。当N=27时,f(27)=(27%10)f(26)=7f(26)。
代码用golang编写。代码如下:
package main
import "fmt"
func main() {
    for i := 1; i <= 3125; i++ {
        fmt.Println(i, FactRightNotZero(i))
    }
}
func FactRightNotZero(n int) int {
    ans := 1
    for n > 0 {
        if n%5 == 0 {
            ans <<= n & 3 //这是精髓
            n /= 5
        } else {
            ans *= n % 10
            n--
        }
        ans %= 10
    }
    return ans
}
执行结果如下:

2021-05-16:时间复杂度必须是logN,如何求阶乘从右向左第一个不为零的数?的更多相关文章
- 2021.12.16 eleveni的刷题记录
		2021.12.16 eleveni的刷题记录 1. 数论 https://www.luogu.com.cn/problem/P2532 1.1卡特兰数 https://www.luogu.com.c ... 
- 2021.11.16 P2375 [NOI2014] 动物园(EXKMP+差分)
		2021.11.16 P2375 [NOI2014] 动物园(EXKMP+差分) https://www.luogu.com.cn/problem/P2375 题意: PS:这道神题的背景让人疑惑,重 ... 
- http://www.cnblogs.com/xia520pi/archive/2012/05/16/2504205.html
		http://www.cnblogs.com/xia520pi/archive/2012/05/16/2504205.html http://www.cnblogs.com/madyina/p/370 ... 
- labuladong 05.16 微信直播
		labuladong 05.16 微信直播 一.基础: 1.校招相关 1)扫盲 秋招:8-10月 提前批:7月 暑期实习:3-5月 非必须 2)关注公司前景,部门信息,公司财报 企查查,天眼查,多获取 ... 
- 2021.05.03 T3 数字
		2021.05.03 T3 数字 问题描述 一个数字被称为好数字当他满足下列条件: 1. 它有**2*n**个数位,n是正整数(允许有前导0) 2. 构成它的每个数字都在给定的数字集合S中. 3. 它 ... 
- 2021.05.14 tarjan
		2021.05.14 tarjan 标准版tarjan 这里使用数组来模拟栈 void tarjan(int x){ ++ind; dfn[x]=low[x]=ind; stacki[++top]=x ... 
- 2021.08.16 P1260 工程规划(差分约束)
		2021.08.16 P1260 工程规划(差分约束) 重点: 1.跑最短路是为了满足更多约束条件. P1260 工程规划 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 造 ... 
- 2021.08.16 P1078 文化之旅(最短路)
		2021.08.16 P1078 文化之旅(最短路) 题意: n个地,k个信仰,每个地都有自己的信仰,信仰之间会相互排斥,同信仰之间也会相互排斥,有m条路,问从s到t的最短距离是多少? 有一位使者要游 ... 
- 2021.08.16 P1300 城市街道交通费系统(dfs)
		2021.08.16 P1300 城市街道交通费系统(dfs) P1300 城市街道交通费系统 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 城市街道交费系统最近创立了.一 ... 
- 2021.08.16 P1363 幻象迷宫(dfs,我感受到了出题人浓浓的恶意)
		2021.08.16 P1363 幻象迷宫(dfs,我感受到了出题人浓浓的恶意) P1363 幻象迷宫 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 幻象迷宫可以认为是无限 ... 
随机推荐
- 基本的dns命令
			打开cmd的方式 win+r 键 输入cmd 管理员方式运行 打开桌面 命令提示符 盘符切换 直接输入要切换的盘 查看当前目录下所有文件 dir 切换目录 cd /d 跨盘 ... 
- windows下配置JDK教程
			1.思路: 首先要确定所要用的应用可以兼容哪个版本jdk,然后开始下载对应的版本,最后安装,配置环境变量,测试,部署完成. 2.jdk下载地址: 如果下载全新的jdk可以直接百度jdk官网下载 如果需 ... 
- vmware workstation 版本合集
			各版本序列号 10.x:1Z0G9-67285-FZG78-ZL3Q2-234JG 11.x:YG74R-86G1M-M8DLP-XEQNT-XAHW2 12.x:ZC3TK-63GE6-481JY- ... 
- 用户user退出登录
			/** * 用户退出登录 * @param request * @return */ @PostMapping("/loginout") public R<String> ... 
- Kafka 事务
			更多内容,前往IT-BLOG 在了解 Kafka的事务之前,先说一下 Kafka中幂等和事务(Kafka 0.11.0.0版本引入的两个特性)以此来实现 Exactly once(精确一次)了解更多链 ... 
- LabVIEW Actor Framwork (2)________ 边学边做server&client
			回顾下初始需求: 现在要做一个类似聊天的demo,一个server端,若干个client端:首先是server启动,通过server可以打开若干个client端,然后每个client可以独立给serv ... 
- flask-sqlalchemy入门
			Flask-SQLAlchemy 是一个为 Flask 应用增加 SQLAlchemy 支持的扩展.它致力于简化在 Flask 中 SQLAlchemy 的使用.SQLAlchemy 是目前pytho ... 
- python入门教程之十八正则表达式
			re.match函数 re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none. 函数语法: re.match(pattern, string, ... 
- wpf CommunityToolkit.Mvvm8.1 MVVM工具包安装引用指南
			CommunityToolkit.Mvvm包(又名MVVM 工具包,以前名为 Microsoft.Toolkit.Mvvm)是一个现代.快速且模块化的 MVVM 库.它支持:.NET Standard ... 
- 多进程和多线程,Thread模块 GIL全局解释锁, 进程池与线程池,协程
			1.多进程实现TCP服务端并发: import socket from multiprocessing import Process def get_server(): server = socket ... 
