n!后面有多少个0(转载)

我的思路:
从”那些数相乘可以得到10”这个角度,问题就变得比较的简单了。
首先考虑,如果N的阶乘为K和10的M次方的乘积(N=K10M),那么N!末尾就有M个0。
如果将N的阶乘分解后,那么N的阶乘可以分解为: 2的X次方,3的Y次方,5的Z次方的乘积。由于10 = 2 * 5,所以M只能和X和Z有关,每一对2和5相乘就可以得到一个10,于是M = MIN(X,Z),不难看出X大于Z,因为被2整除的频率比被5整除的频率高的多。所以可以把公式简化为M=Z.
由上面的分析可以看出,只要计算处Z的值,就可以得到N!末尾0的个数

搜集了一下网上的资料,发现他们弄的挺麻烦的。。不过逻辑性比较强,大家可以参考一下。。。。
令f(x)表示正整数x末尾所含有的“0”的个数,则有:
当0 < n < 5时,f(n!) = 0;
当n >= 5时,f(n!) = k + f(k!), 其中 k = n / 5(取整)。
显然,对于阶乘这个大数,我们不可能将其结果计算出来,再统计其末尾所含有的“0”的个数。所以必须从其数字特征进行分析。下面我们从因式分解的角度切入分析。

我们先考虑一般的情形。对于任意一个正整数,若对其进行因式分解,那么其末尾的“0”必可以分解为2*5。在这里,每一个“0”必然和一个因子“5”相对应。但请注意,一个数的因式分解中因子“5”不一定对应着一个“0”,因为还需要一个因子“2”,才能实现其一一对应。

我们再回到原先的问题。这里先给出一个结论:
结论1: 对于n的阶乘n!,其因式分解中,如果存在一个因子“5”,那么它必然对应着n!末尾的一个“0”。
下面对这个结论进行证明:
(1)当n < 5时, 结论显然成立。
(2)当n >= 5时,令n!= [5k * 5(k-1) * … * 10 * 5] * a,其中 n = 5k + r (0 <= r <= 4),a是一个不含因子“5”的整数。
对于序列5k, 5(k-1), …, 10, 5中每一个数5i(1 <= i <= k),都含有因子“5”,并且在区间(5(i-1),5i)(1 <= i <= k)内存在偶数,也就是说,a中存在一个因子“2”与5i相对应。即,这里的k个因子“5”与n!末尾的k个“0”一一对应。
我们进一步把n!表示为:n!= 5^k * k! * a(公式1),其中5^k表示5的k次方。很容易利用(1)和迭代法,得出结论1。

上面证明了n的阶乘n!末尾的“0”与n!的因式分解中的因子“5”是一一对应的。也就是说,计算n的阶乘n!末尾的“0”的个数,可以转换为计算其因式分解中“5”的个数。
简单来看:
以360!为例:

令f(x)表示正整数x末尾所含有的“0”的个数, g(x)表示正整数x的因式分解中因子“5”的个数,则利用上面的的结论1和公式1有:
f(n!) = g(n!) = g(5^k * k! * a) = k + g(k!) = k + f(k!)
所以,最终的计算公式为:
当0 < n < 5时,f(n!) = 0;
当n >= 5时,f(n!) = k + f(k!), 其中 k = n / 5(取整)。
代码如下:

#include<stdio.h>
#include<iostream>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;int fun(int n)
{int sum = 0;while(n / 5 != 0){sum += (n / 5);n /= 5;}return sum;
}int main()
{int ncase, num, ans;scanf("%d", &ncase);while(ncase--){scanf("%d", &num);ans = fun(num);printf("%d\n", ans);}return 0;
}

转载:
http://blog.csdn.net/niushuai666/article/details/6695790

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/259220.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ico的尺寸_批量压缩、加水印、调整尺寸……用这 6 款 Mac 图片工具一键解决

不论是写文章、做教程&#xff0c;还是处理摄影作品、上传社交平台&#xff0c;对图片的处理肯定少不了。庞大又贵重的专业软件不仅成本较高&#xff0c;还有着不小的上手难度。如果我们仅仅是想要&#xff1a;缩小图片体积、添加水印或者批量对图片进行操作等等&#xff0c;使…

转:MAC 下安装PHONEGAP开发环境

MAC 下安装PHONEGAP开发环境 什么是Phonegap呢&#xff1f;Phonegap是一个利用HTML5去开发App的框架。可以为安卓、iOS、WP、黑莓、火狐等移动操作系统。采用HTML5来编写交互界面。其优点是编写一次可以编译到各种移动平台上&#xff0c;大大为公司节省了开发周期。但是它也是有…

Sql 行转列问题总结

1、行转列---1、最简单的行转列 /* 问题&#xff1a;假设有张学生成绩表(tb)如下: 姓名 课程 分数 张三 语文 74 张三 数学 83 张三 物理 93 李四 语文 74 李四 数学 84 李四 物理 94想变成(得到如下结果)&#xff1a; 姓名 语文 数学 物理 李四 74 84 94 张三 74 8…

寻找第K大的数字

寻找第k大的数字&#xff0c;有很多方法&#xff0c;最基本的就是将数组按照从大到小的顺序排列&#xff0c;找出第k个元素即可。但是这种方法的时间复杂度为o(nlog(n)),我们还能找到更好地方法。下面我们将介绍另外两种办法&#xff0c;一种是基于快排Partition的方法&#xf…

(12)MSP430F5529 常用内置函数和一些说明

&#xff08;1&#xff09; MSP430F5529支持最高工作频率为25MHZ&#xff0c;也就是说你通过 锁相环倍频来提高系统运行速度是有一个限制的&#xff0c; 最高只能到25MHZ&#xff08;再高没意思了&#xff09;。 &#xff08;2&#xff09;几个重要的内联函数 &#xff08;内联…

从零开始学android编程_android初学者的入门秘籍

大概是去年年底开始接触android原本是学习嵌入式的我&#xff0c;领导让我看看能不能搞一下这个android APP。一开始的我懵逼得很。。。这android APP 不是得用java写吗&#xff1f;&#xff1f;&#xff1f; 现在我看网上说比较多还是用kotlin&#xff0c;没去学。。。好家伙&…

修改了sql默认路径无法登录服务器,PostgreSQL错误'无法连接到服务器:没有这样的文件或目录'...

像其他一些人一样,当我在我的项目中运行rake db:migrate或者甚至为我的Ruby on Rails 3.2应用程序尝试大多数数据库任务时,我收到此错误.PGError(无法连接到服务器:没有这样的文件或目录.服务器是否在本地运行并接受Unix域套接字上的连接"/tmp/.s.PGSQL.5432"&#x…

QMarkDowner编译

第一次完整的编译一个工程。哈哈 记录一下 准备环境 我的环境是win7 x64, python2.7.5 x64的。 python 3.x的我没试过,有需要的朋友可以试一下。 安装python2.7.5 x64 确保将安装路径加入到Path中 PyQt4 啊 我的环境是win的 当然要下win版 (PyQt4-4.10.3-gpl-Py2.7-Qt4.8.5-x6…

C++ STL的查找算法

假设你有一个序列容器&#xff0c;或者有一对迭代器标识了一个区间,现在你希望在容器中查找一些信息&#xff0c;这样的查找工作如何进行呢&#xff1f;你的选择往往是&#xff1a; count,count_if,find,find_if,binary_search,lower_bound,upper_bound,equal_range.该如何选择…

习题七

umask 022 &#xff0c;请描述该命令的含义创建目录时默认的权限为&#xff1a;755 rwxr-xr-x创建文件时默认的权限为&#xff1a;644 rw-r--r--note:创建文件的默认权限是拿掉了X 所以最大为666&#xff0c;而目录最大为777 umask NUM 就是去掉相应的权限转载于:https://blo…

web中的cookie管理

本篇是以JSP为背景介绍&#xff0c;但是在web开发中也是相同的原理。 什么是cookie 由于http是一种无状态的协议&#xff0c;因此服务器收到请求后&#xff0c;只会当做一次新的请求。即便你重复发送了1000次同样的请求&#xff0c;这1000次都属于独立的请求。 这样显然效率很低…

unity怎么设置游戏页面_杭州有没有正规的unity游戏开发培训机构?

现在Unity游戏开发是个火热的行业&#xff0c;薪资待遇比较高&#xff0c;未来的发展方向和前景也比较不错&#xff0c;很多人也都想成为专业Unity游戏开发工程师&#xff0c;学习Unity游戏开发已经成为很多追求更好就业前景的人的选择。学习专业、系统的Unity游戏开发知识并达…

VC++ 使用attributes定义接口

1.定义预处理命令_ATL_ATTRIBUTES 2.在一个全局的Cpp文件里面配置module的attribute [module(dll, uuid "{3845951F-15B8-4286-8E7D-E9D4F5C7B6CE}", name "TestApp")]3.定义接口 [object,uuid("9F414A8A-1D5E-4aff-A60E-CFD65155ABB6"),dual,…

h3c 虚拟服务器 下一跳,H3CNE 312题和313题 直连路由静态路由的下一跳问题

321.在MSR 路由器上看到路由表里有如下显示&#xff1a; Destination/Mask Proto Pre Cost NextHop Interface 127.0.0.0/8 Direct 0 0 127.0.0.1 InLoop0 127.0.0.1/32 Direct 0 0 127.0.0.1 InLoop0 192.168.96.0/19 Direct 0 0 192.168.120.153 S6/0 那么关于目的地321.在MS…

C++成员变量的初始化顺序问题

先来看两道题&#xff1a; // count algorithm example #include <iostream> // std::cout #include <algorithm> // std::count #include <vector> // std::vector using namespace std; class A { public:A() { cout << "in A()&q…

Knockout.Js案例一Introduction

在这第一个教程中,您将体验的一些基本知识构建的web UI Model-View-ViewModel使用knockout.js(MVVM)模式。案例1&#xff1a;添加:data-bind <p>First name: <strong data-bind"text:firstName">1</strong></p><p>Last name: <stro…

C#注册表常用操作

1&#xff1a;加键 改值 Microsoft.Win32.RegistryKey Key Microsoft.Win32.Registry.CurrentUser.CreateSubKey( "Software\Microsoft\Internet Explorer\Main"); Key.SetValue( "Window Title" , value ); Key.Close(); …

谷歌浏览器外贸版_做外贸快两个月,没有单怎么办?

Hello 大家好&#xff0c;我是Jack。今天给大家更新一篇在知乎看到的外贸问题&#xff1a;做外贸快两个月&#xff0c;没有单怎么办?外贸这个话题在知乎算是小众话题了&#xff0c;相比较于职场&#xff0c;英语学习&#xff0c;国际政治&#xff0c;IT等&#xff0c;这些话题…

React Native通信机制详解

http://blog.cnbang.net/tech/2698/ React Native是facebook刚开源的框架&#xff0c;可以用javascript直接开发原生APP&#xff0c;先不说这个框架后续是否能得到大众认可&#xff0c;单从源码来说&#xff0c;这个框架源码里有非常多的设计思想和实现方式值得学习&#xff0c…

C++11系列学习之四----auto

在哪些情况下要申明类型&#xff1a; 定义变量类型 函数返回值&#xff0c;函数参数 表达式返回变量类型 auto关键字原理 在定义变量的时候必须申明类型&#xff0c;c是强语言类型&#xff0c;在编译阶段需要知道类型&#xff0c;这样的好处是程序效率更高&#xff0c;而…