会员视频网站建设,张家港做网站收费标准,wordpress 宝宝主题,移动网站设计教程题目#xff1a; php实现N的阶乘末尾有多个0
描述#xff1a; 阶乘 N! 123*…N; 比如 5! 12345 120 末端有1个0 解题思路#xff1a; N! K*(10^M) N的阶乘为K和10的M次方的乘积#xff0c;那么N!末尾就有M个0。如果将N的阶乘分解后#xff0c;那么N的阶乘可以分解为 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整除的频率高的多。所以可以把公式简化为MZ 所以我们求解N的阶乘最后的0.相当于求解里面有多个5的因子
当我们遇到一大问题可以拆成一个个小的问题来求解。 function factorial($n){$n intval($n);if ($n 0) {return 0;}$sum 0;for ($i 5; $i $n; $i $i 5) {$j $i;//求解5的个数 比如15 里面有3个5while ($j % 5 0) {$sum;$j $j / 5;}}return $sum;}