56、php实现N的阶乘末尾有多个0

张裕  金牌会员 | 2024-8-4 04:26:19 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 354|帖子 354|积分 1062

题目: php实现N的阶乘末尾有多个0

描述:
阶乘
N! = 123*…N;
比如 5! = 12345 = 120 末了有1个0
解题思绪:
N! = K*(10^M)
N的阶乘为K和10的M次方的乘积,那么N!末尾就有M个0。如果将N的阶乘分解后,那么N的阶乘可以分解为: 2的X次方,3的Y次方,4的Z次方,…的乘积。
由于10 = 2 * 5,以是M只能和X和Z有关,每一对2和5相乘就可以得到一个10,
于是M = MIN( X,Z),不难看出X大于Z,
因为被2整除的频率比被5整除的频率高的多。以是可以把公式简化为M=Z
以是我们求解N的阶乘末了的0.相当于求解里面有多个5的因子
当我们遇到一大题目可以拆成一个个小的题目,来求解。
  1. function factorial($n)
  2.     {
  3.         $n = intval($n);
  4.         if ($n < 0) {
  5.             return 0;
  6.         }
  7.         $sum = 0;
  8.         for ($i = 5; $i <= $n; $i = $i + 5) {
  9.             $j = $i;
  10.             //求解5的个数 比如15 里面有3个5
  11.             while ($j % 5 == 0) {
  12.                 $sum++;
  13.                 $j = $j / 5;
  14.             }
  15.         }
  16.         return $sum;
  17.     }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

张裕

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表