一些公式或者知识(不断补充)
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):
int lcm(int a,int b):
组合数
long long C(int n,int m):
卡塔兰数
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)
普通计算: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)
相关文章推荐
- js放置位置及原因
- 给 Android 开发者的 RxJava 详解
- Apache Shiro 简介
- aspx 端口转发,代码提取自 aspxspy
- javascript高级开发学习笔记九
- javascript高级开发学习笔记十
- JAVA缓存技术
- 【技术】无法远程电脑 解决办法
- TableView分割线顶不到头 解决
- javascript高级开发学习笔记七
- javascript高级开发学习笔记八
- 三种SVM的对偶问题
- BTS PenTesting Lab - A1 Injection
- 日经春秋 20151225
- 天声人語 20151225 両陛下と戦争の悲しみ
- AMF解析遇上XXE,BurpSuite也躺枪
- Cantor的数表 【找规律】
- ZooKeeper+Wildfly(jboss)+SolrCloud搭建
- Openwrt永久修改MAC地址源代码
- 配置Java jdk(备忘)