博客
关于我
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/

    你可能感兴趣的文章
    875 爱吃香蕉的珂珂(二分查找)
    查看>>
    450 删除二叉搜索树中的节点(递归删除节点)
    查看>>
    桌面图标的自动排列图标
    查看>>
    第十一届蓝桥杯python组第二场省赛-数字三角形
    查看>>
    数字三角形的无返回值的深度优先搜索解法
    查看>>
    完全背包问题的简化思路
    查看>>
    Jquery添加元素
    查看>>
    Jquery使用需要下载的文件
    查看>>
    BST中某一层的所有节点(宽度优先搜索)
    查看>>
    广度优先搜索
    查看>>
    猜字母
    查看>>
    Eclipse导出项目出现resource is out of sync with the file...错误
    查看>>
    Linux网络环境配置(设置ip地址)
    查看>>
    Idea使用Spring Initializr来快速创建springboot项目
    查看>>
    Dijkstra算法的总结
    查看>>
    ubuntu中安装scikit-learn
    查看>>
    SpringCloud和SprinBoot之间的关系
    查看>>
    javascript定义变量及数据类型介绍
    查看>>
    C语言的运算符和表达式
    查看>>
    椭圆曲线密码系统——椭圆曲线
    查看>>