Lucas定理 、斯特灵公式

斯特灵公式是一条用来取n阶乘的近似值的数学公式。

公式为:

用该公式我们可以用来估算n阶乘的值;估算n阶乘的在任意进制下的位数。

如何计算在R进制下的位数:我们可以结合对数来计算,比如十进制就是lg(n!)+1,二进制则是log2(n!)+1。

Lucas(卢卡斯)定理

公式为:(p为质数)

当然,当n较小时,我们可以用组合数里面的定理来递推求解。

然而当n较大时,显然时间花费很大。而Lucas定理恰好是解决大组合数取模的优解。

在这里由于知识有限,不能完全看懂Lucas定理证明的全部过程。所以就不写了。

而代码实现Lucas定理也很简洁。只需要递归就行。

使用Lucas定理的时候需要注意:p不能太大于10^5。

Cnm=Cn/pm/p×Cnmodpmmodp(modp)。

Cnm=Cn/pm/p×Cnmodpmmodp(modp)。

Cnm=Cn/pm/p×Cnmodpmmodp(modp)。

原文地址:https://www.cnblogs.com/ISGuXing/p/8410585.html

时间: 2024-08-24 00:56:40

Lucas定理 、斯特灵公式的相关文章

hdu1018--斯特灵公式

斯特灵公式 Wiki http://zh.wikipedia.org/wiki/斯特林公式 /** \brief hdu 1018 * * \param date 2014/7/24 * \param state AC * \return * */ #include <iostream> #include <fstream> #include <cmath> using namespace std; const double PI=3.1415926; int main

HDU3944-DP?(帕斯卡公式+Lucas定理)

DP? Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 128000/128000 K (Java/Others) Total Submission(s): 1930    Accepted Submission(s): 640 Problem Description Figure 1 shows the Yang Hui Triangle. We number the row from top to bottom 0,1,2,-

HDU 3037 Saving Beans (Lucas定理)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3037 推出公式为C(n + m, m) % p, 用Lucas定理求大组合数取模的值 代码: #include <stdio.h> #include <string.h> #include <algorithm> using namespace std; int t; long long n, m, p; long long pow(long long n, long lo

lucas定理证明

Lucas 定理(证明) A.B是非负整数,p是质数.AB写成p进制:A=a[n]a[n-1]...a[0],B=b[n]b[n-1]...b[0]. 则组合数C(A,B)与C(a[n],b[n])*C(a[n-1],b[n-1])*...*C(a[0],b[0])  mod p 相同 即:Lucas(n,m,p)=c(n%p,m%p)*Lucas(n/p,m/p,p) 证明: 首先我们注意到 n=(ak...a2,a1,a0)p  =  (ak...a2,a1)p * p + a0 =  [n

组合数(Lucas定理) + 快速幂 --- HDU 5226 Tom and matrix

Tom and matrix Problem's Link:   http://acm.hdu.edu.cn/showproblem.php?pid=5226 Mean: 题意很简单,略. analyse: 直接可以用Lucas定理+快速幂水过的,但是我却作死的用了另一种方法. 方法一:Lucas定理+快速幂水过 方法二:首先问题可以转化为求(0,0),(n,m)这个子矩阵的所有数之和.画个图容易得到一个做法,对于n<=m,答案就是2^0+2^1+...+2^m=2^(m+1)-1,对于n>m

[hdu5226]组合数求和取模(Lucas定理)

题意:给一个矩阵a,a[i][j] = C[i][j](i>=j) or 0(i < j),求(x1,y1),(x2,y2)这个子矩阵里面的所有数的和. 思路:首先问题可以转化为求(0,0),(n,m)这个子矩阵的所有数之和.画个图容易得到一个做法,对于n<=m,答案就是2^0+2^1+...+2^m=2^(m+1)-1,对于n>m,答案由两部分构成,一部分是2^(m+1)-1,另一部分是sigma i:m+1->n f[i][m],f[i][m]表示第i行前m列的数之和,f

[ACM] hdu 3037 Saving Beans (Lucas定理,组合数取模)

Saving Beans Problem Description Although winter is far away, squirrels have to work day and night to save beans. They need plenty of food to get through those long cold days. After some time the squirrel family thinks that they have to solve a probl

hdu 3037 Lucas定理

题目可以转换成 x1+x2+……+xn=m 有多少组解,m在题中可以取0-m. x1+x2+...+xn = m的解的个数,利用插板法可以得到方案数为:(m+1)*(m+2)...(m+n-1) = C(m+n-1,n-1) = C(m+n-1,m) 现在就需要求不大于m的,相当于对i = 0,1...,m对C(n+i-1,i)求和,根据公式C(n,k) = C(n-1,k)+C(n-1,k-1)得C(n-1,0)+C(n,1)+...+C(n+m-1,m)= C(n,0)+C(n,1)+C(n

ZOJ3557 How Many Sets II( Lucas定理)

转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud How Many Sets II Time Limit: 2 Seconds      Memory Limit: 65536 KB Given a set S = {1, 2, ..., n}, number m and p, your job is to count how many set T satisfies the following condition: T is