这道题告诉我们递推一定要慢慢细细的推
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的更多相关文章

随机推荐

  1. Linux系统性能测试工具sysbench

    1.CPU性能测试 sysbench --test=cpu --cpu-max-prime= --num-threads= run 2.内存性能测试 sysbench --test=memory -- ...

  2. python: pandas模块

    10分钟入门 pandas 评:我跟作者的智商差距是有多大,才能让我用60分钟看完作者认为10分钟的内容... 详细内容见 Cookbook 习惯上我们先导入 : In [1]: import pan ...

  3. jq版本更新后无live函数的处理.

    之前你的代码如果是$("#ele").live("click", function() {    //...});现在要写成$("#ele" ...

  4. 给右键 添加dos命令

    reg add "HKEY_CURRENT_USER\Console" /v "ScreenBufferSize" /t REG_DWORD /d 655361 ...

  5. ios&h5混合开发项目仿app页面跳转优化

    前言:本人原本是ios开发工程师,但由于现今H5的兴起,行内刮起了一阵混合开发的风气,趁着这股劲,我也学了前端开发,不说研究的多深,但也能胜任日常的开发工作.长话短说,现今的混合开发应该还处于摸索阶段 ...

  6. ios 用LLDB查看模拟器文件路径以及一些常用的命令

    我看网络上有好多有关lldb调试命令的介绍,我都看了一遍,都没有这个方法,所以我在这里补充出来,帮助需要的人. 另外附上一些 实用LLDB命令 我们可以使用e命令定义变量 (lldb) e NSStr ...

  7. Objective c 自动释放池

    学IOS 的大家都知道,IOS 一共有三种内存管理方式:MRC .ARC.自动释放池.我按照我个人的理解简述一下自动释放池,希望能给大家一点帮助,如有错误请大家及时批评指正. 自动释放池有几个特点:1 ...

  8. Gulp-入门教程 搭配环境

    之前一直听朋友谈起gulp,但没有使用过,最近有机会接触到,现在给大家分享下,不对的地方还请指正.我一直以为互相分享是学习的一种好方式.下面进入正题: 首先来了解下gulp,最起码要知道:我们为什么要 ...

  9. 简单的完全背包HDU1114

    今天广州下雨啦,不过没关系啦,反正我最近也都在刷题学习算法. 昨天做了五题01背包,今天还是背包,不过是完全背包,估计做动态规划要持续好一段时间,一开始选了一道简单题目啦. HDU1114,看了小一段 ...

  10. Codeforces 549C The Game Of Parity(博弈)

    The Game Of Parity Solution: 这个题只需要分类讨论就可以解决. 先分别统计奇数和偶数的个数. 然后判断谁走最后一步,如果走最后一步时候同时有偶数和奇数,那么走最后一步的赢. ...