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的更多相关文章
随机推荐
- PHP关闭Notice错误提示
原文出处 本文章介绍在php中关闭notice错误的一些做法,但是不得不说的是在关掉错误提示时,那么程序代码中大量的notice级别错误是否会造成PHP性能下降 PHP Notice: Undefin ...
- [功能帮助类] C#RandomHelper随机数,随机字符,可限制范围-帮助类 (转载)
点击下载 RandomHelper.rar 主要功能如下 .生成一个指定范围的随机整数,该随机数范围包括最小值,但不包括最大值 .生成一个0.0到1.0的随机小数 .对一个数组进行随机排序 . 一:随 ...
- P2P之UDP穿透NAT原理
首先先介绍一些基本概念: NAT(Network Address Translators),网络地址转换:网络地址转换是在IP地址日益缺乏的情况下产生的,它的主要目的就 ...
- android 微信分享没反应问题总结
一.废话 我必须说我再这个上面吃了很多的亏,所以希望有人不跟我一样吃亏.因为我本身不够仔细的原因,所以我希望能够做一些总结.---废话讲完. 这个文章已经过时了.是几年前写的.http://www. ...
- C# 跨线程调用问题
纠结了好久,终于知道了winform和WPF的UI的跨线程调用的解决方法: winform下如果为了省事,可以直接禁用跨线程检查: Control.CheckForIllegalCrossThread ...
- LVS高可用集群
高可用LVS 集群构建 在LVS集群当中Director的作用是很关键的,所以我们在生产环境中要保证其高可用. 高可用架构图: 1.通过 piranha搭建LVS高可用性集群 piranha是REDH ...
- (转)log4j日志级别设置成DEBUG时输出Html代码等问题:
log4j日志级别设置成DEBUG时输出Html代码等问题: 问题: log4j日志级别设置成DEBUG时会输出很多信息,包括一些Html代码 解决方案: log4j的控制是树形,所以在log4j.p ...
- eclipse下使用Genymotion调试Android程序出现的问题
一. The connection to adb is down, and a severe error has occured. You must restart adb and Eclipse. ...
- sql知识
SQL 基本知识 SQL Server 是Microsoft 公司推出的关系型数据库管理系统.具有使用方便可伸缩性好与相关软件集成程度高等优点,可跨越从运行Microsoft Windows 98 的 ...
- PHP设计模式之:策略模式
<?phpabstract class Strategy{ public abstract function AlgorithmInterface();} class ConcreteSt ...