您的位置:首页 > 其它

一些公式或者知识(不断补充)

2015-12-25 09:23 232 查看
斯特林公式(求n的阶乘的近似值)

普通计算:N!=1*2*3*……*N;

要计算N!后得到的数字的位数则是:lg(N)+1;

但当N很大时,可用斯特林公式进行优化:

N!=sqrt(2*pi*N)*(N/e)^N;

pi=3.1415926=acos(-1.0;

e=2.7182818284590452354;

lg(N!)+1=(lg(2*pi)+lgN)/2+N*(lg(N-lge)+1;

圆锥曲线辨别

Ax^2+Bxy+Cy^2+Dx+Ey+F=0;

当B^2-4AC>0时 双曲线;

当B^2-4AC<0时 椭圆/圆;

当B^2-4AC=0时 抛物线;

更详细:

圆:B=0,A=C !=0,D^2+E^2-4AF>0;

椭圆:B^2-4AC<0,A(AE^2+CD^2-BDE)+AF(B^2-4AC)>0;

双曲线:B^2-4AC>0,AE^2+CD^2-BDE+F(B^2-4AC)!=0;

抛物线:B^2-4AC==0,AE^2+CD^2-BDE!=0;

两条相交直线:B^2-4AC>0,AE^2+CD^2-BDE-F(B^2-4AC)==0;

两条平行直线:B^2-4AC==0,BD-2AE==0,A!=0或C!=0,D^2+E^2-4F(A+C)>0;

两条重合直线:B^2-4AC==0,BD-2AE==0,A!=0或C!=0,D^2+E^2-4F(A+C)==0;

一条直线:A=B=C=0,DE!=0;

最小公倍数

int gcd(int a,int b):

if(b) return gcd(b,a%b);
else  return a;


int lcm(int a,int b):

return a/gcd(a,b)*b;


组合数

long long C(int n,int m):

if(m<n-m) m=n-m;
long long ans=1;
for(int i=m+1;i<=n;i++) ans*=i;
for(int i=1;i<=n-m;i++) ans/=i;
return ans;


卡塔兰数

Cn=(2n)!/(n+1)!/n!

1 2 5 14 42 132 429 1430 4862 16796

鸽巢原理

解释一:若有n个笼子和n+1只鸽子,所有的鸽子都被关在鸽笼里,那么至少有一个笼子有至少2只鸽子。

解释二:若有n个笼子和kn+1只鸽子,所有的鸽子都被关在鸽笼里,那么至少有一个笼子有至少k+1只鸽子。

推广:如果要把n个物件分配到m个容器中,必有至少一个容器容纳至少⌈n / m⌉个物件。(⌈x⌉大于等于x的最小的整数)。

关于hdu1297的分析

分男女生考慮,設總共有n個人(f(n)表示當有n個人的時候合法序列的個數,ak表示第k個人),當a1為男生時,有f(n-1)種可能,當a1是女生時,a2必為女生;當a1、a2都為女生時,a3為男生,有f(n-3)種可能,當a1、a2、a3都為女生,a4為男生時,有f(n-4)種可能,以此類推(下式中1表示n全為女生時那種情況,規定f(0) = 1), 故有 f(n) = f(n-1) + f(n-3) + f(n-4) + f(n-5) + … + f(1) + f(0) + 1; 所以 f(n-2) = f(n-3) + f(n-5) + f(n-6) + … + f(1) + f(0) + 1; 由以上兩式得 f(n) = f(n-1) + f(n-2) + f(n-4)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: