UVA 10139 判断n的阶乘能否被m整除

题目连接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=13&problem=1080&mosmsg=Submission+received+with+ID+8769167

 

题意不解释了,直接说方法。

首先观察数据范围,loss than 2^31次方,所以一般的暴力算法肯定会超时的,故需要从阶乘的本质入手

 

首先是一个数论的基本常识:

n!中间包含了多少个x(x是任意的一个数,不过一般情况下我们都只讨论x为质数),这种问题的答案是:
n/x+n/(x^2)+n/(x^3).....[一直加到x的乘方不超过n],这个定理的证明也非常的简单,这里就不再赘述了

 

然后还有一个数论的基本常识就是任意一个数的质因数分解

 

必须知道这种分解是唯一的

即合数y=sigma[(pi)^ni]

而且pi的范围在2——sqrt(n)之间;

 

于是乎,我们可以先分解掉m(这个花不了多少时间,如果用质数筛选法加速的话)

 

然后我们再去看m分解出来的每一个pi在n!中是否有足够多,为了提速。我们可以先从最大的pi开始算

 

以下是我的代码:

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值