当前位置: 首页 > article >正文

蓝桥杯-求阶乘-python

 问题描述

满足N!的末尾恰好有K个0的最小的N是多少?
如果这样的N不存在输出一1。

思路解析

末尾的0是由10产生的,而10是由质数2和5产生的

在求阶乘的过程中,只要是偶数就会有2,而5相对2更少,所以对于10的数量我们可以用计算5的数量来代替

所以我们的目标就是求1-N中有多少个5

1-5,1-10,1-15,1-20,1-25,分别有1,2,3,4,5+1个5

不难看出,5的个数是最后一个数除以5的商(直至不够除5,因为有些数包括多个5,例如25,包含了两个5)

def five_count(num):
  count = 0
  while  !(num%==5) :
    #商即为5的个数,可以看作是1*5,2*5,3*5... 1,2,3就是包括前面数字中的5的个数的总和
    count += num//5
    num = num//5
  return count

因为要求的N要求最小,即N一定是5的倍数

但是范围太大,即使我们只找5的倍数,还是会超时,

既然是查找,我们便可以利用二分法

l = 1
r = 10**19

while(l<r):
  mid = (l+r)//2
  ct = five_count(mid)
#一直循环到最接近的结果或符合条件的最终结果
  if ct < k:
    l = mid + 1
  else:
    r = mid

由于二分循环条件是l<r,(l<=r可能会造成死循环)

所以在最后还要考虑l=r的情况

#当r==l时
if k == five_count(l):
  print(l)

但是二分法查找的不仅仅是5的倍数,因此我们要考虑非5的倍数

对于非5倍数,我们考虑最接近该数的小于他的5的倍数,换一个说法,即考虑该数除5的商,不考虑余数

我们只需要把循环条件改成num//5即可

def five_count(num):
  count = 0
  #不是5的倍数也可以
  while (num//5):
    #商即为5的个数,可以看作是1*5,2*5,3*5... 1,2,3就是包括前面数字中的5的个数的总和
    count += num//5
    num = num//5
  return count

完整代码

import os
import sys

# 请在此输入您的代码
#计算从1~num中有多少个5,不是5的倍数也可以
def five_count(num):
  count = 0
  #不是5的倍数也可以
  while (num//5):
    #商即为5的个数,可以看作是1*5,2*5,3*5... 1,2,3就是包括前面数字中的5的个数的总和
    count += num//5
    num = num//5
  return count

k = int(input())
l = 1
r = 10**19


while(l<r):
  #mid = l + ((r - l) >> 1)
  mid = (l+r)//2
  ct = five_count(mid)

#一直循环到最接近的结果或符合条件的最终结果
  if ct < k:
    l = mid + 1
  else:
    r = mid
#l、r、mid三者最后均相等
#当r==l时
if k == five_count(l):
  print(l)
else:
  print(-1)


http://www.kler.cn/a/231816.html

相关文章:

  • 【不写for循环】玩玩行列
  • python核心语法
  • STL序列式容器之list
  • 51单片机应用开发---LCD1602显示应用
  • VuePress v2 快速搭建属于自己的个人博客网站
  • 使用Axios函数库进行网络请求的使用指南
  • elk之search API
  • Apollo2.2.0 arm 达梦 人大金仓 适配
  • 华为认证 | 2024了,华为HCIA还有必要考?
  • CSS 控制 video 标签的控制栏组件的显隐
  • C语言实现网络爬虫
  • 【C++】C++的简要介绍
  • Stable Diffusion 模型下载:Samaritan 3d Cartoon SDXL(撒玛利亚人 3d 卡通 SDXL)
  • Nginx+React在Docker中实现项目部署
  • Pinia的使用与原理
  • Rust入门1——HelloWorld
  • Golang数据库编程详解 | 深入浅出Go语言原生数据库编程
  • C语言:操作符详解
  • LabVIEW高精度主动模拟肺系统的开发与应用
  • 华为机考入门python3--(11)牛客11-数字颠倒
  • 【C语言自定义类型详解进阶】结构体(补充结构体的对齐和位段,一口气看完系列,央妈都点赞的博文)
  • 【Java 数据结构】反射
  • 扩展说明: 指令微调 Llama 2
  • SpringBoot + Tess4J 实现本地与远程图片的文字识别
  • 优化Mac电脑文件管理工具cleanmymac2024
  • 机器学习中常用的性能度量—— ROC 和 AUC