poj1150
这道题告诉我们递推一定要慢慢细细的推
Pmn=n!/m!,我们可以先考虑n!的最后一位是什么
首先最后一位非0位我们首先想到把0都干掉
也就是先把2和5提出来,这两个其实是同样的方法
对于N!中有多少个因数2 f(n)=f(n div 2)+ n div 2这个不难想
提出2和5之后剩下来的数我们只要考虑末位,只可能是1,3,7,9
当我们讨论末位为x时,设f(n,x)表示N!中提出2和5后某位是x的个数
首先一个数列实际上可以分成偶数列和奇数列,以1*2*3*4*5*6*7*8*9*10为例
分成1 3 5 7 9, 2 4 6 8 10
这样我们尝试分别进行统计,可以发现,实际上2 4 6 8 10中把2提出来就是 1 2 3 4 5 又回到了对n!这种问题
所以不难得到f(n,x) = f(n/2,x) + g(n,x),g(n)表示奇数列中的数目,所以我们需要解决g(n)
观察奇数列,实际上又分成了两部分非5的倍数以及5的奇倍数
根据上面处理的经验不难得到 g(n,x) = n/10+(n%10 >= x)+g(n/5,x)
这样对于n!的最末非0位就处理出来了
而对于n!/m!,我们只要求出m~n之间的2和5的个数,某位为1,3,7,9的个数
这显然可以用前缀合德思想搞,但要注意2和5的个数谁多谁少
const table:array[..,..] of longint=((,,,),
(,,,),
(,,,),
(,,,));
var a:array[..] of longint;
f,i,n,m,ans:longint; function get2(x:longint):longint;
begin
if x= then exit()
else exit(x shr +get2(x shr ));
end; function get5(x:longint):longint;
begin
if x= then exit()
else exit(x div +get5(x div ));
end; function getx(n,x:longint):longint;
begin
if n= then exit()
else
if n mod >=x then exit(+n div +getx(n div ,x))
else exit(n div +getx(n div ,x));
end; function get(n,x:longint):longint;
begin
if n= then exit()
else exit(get(n shr ,x)+getx(n,x));
end; begin
while not eof do
begin
readln(n,m);
m:=n-m;
a[]:=get2(n)-get2(m);
f:=get5(n)-get5(m);
if a[]<f then
begin
writeln();
continue;
end;
ans:=;
a[]:=get(n,)-get(m,);
a[]:=get(n,)-get(m,);
a[]:=get(n,)-get(m,);
if a[]<>f then
ans:=ans*table[,(a[]-f) mod ] mod ;
for i:= to do
ans:=ans*table[i,a[i] mod ] mod ;
writeln(ans);
end;
end.
poj1150的更多相关文章
随机推荐
- linux64下安装swftools
在文档转换器中,需要在linux上安装swftools,经历了一番曲折过程终于安装成功.swftools安装包从http://www.swftools.org/download.html上面下载. 在 ...
- Genymotion无法启动Virtual Box
Genymotion是非常快速的Android模拟器.这两天搞了一下Android Studio,想用Genymotion跑起一下,但死活都启动不了.很奇怪,明明几个月前还顺利启动的. Genymot ...
- 加密算法 DES 3DES RSA AES 简介
数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码,通常称为[密文],使其只能在输入相应的[密钥]之后才能显示出本来内容,通过这样的途径来达到保护数据不被非法人 ...
- HDU-1037(水水水题)
Keep on Truckin' Problem Description Boudreaux and Thibodeaux are on the road again . . . "Boud ...
- memcached 安装
安装 memcached 需要 三部1,下载 memcached 放到php目录将php_memcached.dll 放到php的ext 目录 2,打开管理员命令,将memcached 拖拉到命令中, ...
- 版本控制SVN与Eclipse4.4.1集成 ( eclipse svn:E175002错误解决 )
Eclipse版本--Luna Service Release 1(4.4.1) SVN版本-----1.8.X 系统OS-------ubuntu 14.04 LTS 1.通过地址安装 Help-& ...
- C#中有关字符串去重的解决方案
今天在群里看到一个同学的面试题 题目中有一个这样的要求 //本地有个文档文件a.txt里面包含的内容分为一段字符串"abacbacde"请编写一个程序,获取文件得到对应的内容,并对 ...
- juquery验证插件validation addMethod方法使用笔记
该方法有三个api接口参数,name,method,messages addMethod(name,method,message)方法 参数 name 是添加的方法的名字. 参数 method 是一个 ...
- 在本地Apache服务器配置虚拟主机站点
Apache 配置localhost虚拟主机步骤1,打开apache目录下httpd.conf文件,找到如下模块 # Virtual hosts #Include conf ...
- CI源码引用使用--php引用demo,静态变量和引用关系
CI源码引用使用在Common.php中,加载配置和类的方法 function &test() { static $a = ''; if (!$a) { $a ...