博客
关于我
codeforces The Eternal Immortality 题解
阅读量:366 次
发布时间:2019-03-05

本文共 521 字,大约阅读时间需要 1 分钟。

当给定两个数a和b时,要求计算b! / a!的最后一位数字。由于a和b可能非常大(最高可达10^18),直接计算阶乘是不可行的。因此,我们需要找到更高效的方法。

首先,我们注意到b! / a!可以表示为从a+1到b的所有整数的乘积。例如,当a=2,b=4时,b! / a! = 3×4=12,最后一位数字是2。

接下来,我们分析乘积中的因数情况。当b-a的值大于等于10时,乘积中至少包含一个10的因数,因此最后一位数字必然为0。例如,b-a=10时,乘积中至少有一个5和一个2相乘得到10。

因此,我们可以将问题分为两种情况:

  • 当b-a >=10时,直接输出0。
  • 否则,计算从a+1到b的乘积,并取模10。
  • 此外,当a=0时,a+1=1,因此b! / a!实际上是从1到b的乘积。例如,当a=0,b=10时,乘积为1×2×3×...×10=3628800,最后一位数字是0。

    综上所述,我们可以通过以下步骤解决问题:

  • 处理特殊情况:当a=0时,设置a=1。
  • 计算b-a的值:如果大于等于10,输出0。
  • 否则,计算从a+1到b的乘积,并在每一步取模10,最后输出结果。
  • 这个方法有效地处理了大范围内的a和b,避免了直接计算阶乘带来的性能问题。

    转载地址:http://xgbwz.baihongyu.com/

    你可能感兴趣的文章
    Processes, threads and goroutines
    查看>>
    c++中的10种常见继承
    查看>>
    E28 LoRa模块透传 定点传输 RSSI测试与MicroPython应用
    查看>>
    Vue学习—深入剖析渲染函数
    查看>>
    Vue学习—深入剖析函数式组件
    查看>>
    简单Makefile的编写
    查看>>
    使用BAT批处理 匹配查找指定文件夹,并在当文件夹下创建空文件
    查看>>
    wxpython的Hello,World代码探索
    查看>>
    【数字图像处理】OpenCV3 学习笔记
    查看>>
    【单片机开发】智能小车工程(经验总结)
    查看>>
    【单片机开发】基于stm32的掌上游戏机设计 (项目规划)
    查看>>
    KeepAlived介绍、配置示例、KeepAlived配置IPVS、调用脚本进行监控
    查看>>
    web服务器处理网络请求过程、I/O与I/O模型介绍、select、poll、epoll介绍
    查看>>
    【Numpy学习】np.count_nonzero()用法解析
    查看>>
    Scala集合-数组、元组
    查看>>
    Flink Standalone集群安装和部署
    查看>>
    JAVA网络爬虫01-http client爬取网络内容
    查看>>
    04 程序流程控制
    查看>>
    java并发编程(1)
    查看>>
    C++&&STL
    查看>>