排列组合各函数集合
2024-12-12 18:03:15
发布于:北京
排列组合函数模板
#include<bits/stdc++.h>//CH夸克U出品
using namespace std;
long long f(int n)//阶乘
{
long long sum=1;
for(int i=1;i<=n;i++)sum*=i;
return sum;
}
long long a(int n,int m)//排列数
{
long long sum=0;
sum=f(n)/f(n-m);
return sum;
}
long long c(int n,int m)//组合数
{
long long sum=0;
sum=a(n,m)/a(m,m);
return sum;
}
long long bint(int a,int b,int n)//二项式定理
{
long long sum=0;
for(int i=0;i<=n;i++)
{
long long p=0;
p=c(n,i)*(long long)(pow(a,n-i))*(long long)(pow(b,i));
sum+=p;
}
return sum;
}
long long big_bint(int n)//二项式定理最大系数
{
return c(n,(n/2));
}
long long error_c(int n)//错排问题
{
long long d[10005];
d[1]=0,d[2]=1;
for(int i=3;i<=n;i++)
{
d[i]=(i-1)*(d[n-1]+d[n-2]);
}
return d[n];
}
long long feipo(int n)//斐波那契数列
{
long long fp[10005];
fp[1]=fp[2]=1;
for(int i=3;i<=n;i++)
{
fp[i]=fp[i-1]+fp[i-2];
}
return fp[n];
}
long long katlan(int n)//卡特兰数
{
long long h[100005]={0,1};
for(long long i=2;i<=n;i++)
{
h[i]=(4*i-2)*h[i-1]/(i+1);
}
return h[n];
//其实是由C(2n,n)-C(2n,n-1)转化过来的
}
long long circle(int n)//圆排列
{
long long sum=0;
sum=f(n-1);//任何人都可以是开头,所以把排成一排的方案数 ÷n
return sum;
}
long long s(int n,int m)//斯特林数
{
long long d[105][105]={0};
d[0][0]=1;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=i;j++)
{
d[i][j]=j*d[i-1][j]+d[i-1][m-1];
}
}
return d[n][m];
}
这里空空如也
有帮助,赞一个