排列
![](https://i-blog.csdnimg.cn/blog_migrate/48a0ba89a63388e0748fe72dfe1bccbf.png)
![](https://i-blog.csdnimg.cn/blog_migrate/769c0f3e05e307b8919ece8bfcd67114.png)
表示从m个中选取n个进行排序的方案数
排列与顺序有关。
组合
![](https://i-blog.csdnimg.cn/blog_migrate/7eb1c098645e73dd3cec18ed49e11b28.png)
表示从m个中选取n个的方案数
组合与顺序无关
二项式定理
杨辉三角使用递推的方式求二项式的系数,不易直接求出
二项式定理使用组合的方式求出二项式的系数,可以直接求出
![](https://i-blog.csdnimg.cn/blog_migrate/8f57a46af4b731c835c57ea19d0d8c9e.png)
卡特兰数
![](https://i-blog.csdnimg.cn/blog_migrate/7b895208cab211656a3d211c143a1da7.png)
同余和取模
![](https://i-blog.csdnimg.cn/blog_migrate/57b2725344ba494571f8ba4cba57ae10.png)
集合的容斥原理
![](https://i-blog.csdnimg.cn/blog_migrate/56f347c9606e451ef85d87ab9aba3441.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/c20978b178e66861c81938777a8689e2.png)
容斥原理主要解决集合的合并问题,解决重复计算或少算问题。
质数的判断
用试除法判断质数(最佳算法),算法复杂度为O().
#include<bits/stdc++.h>
using namespace std;
bool is_prime(int n)
{
if(n<2)
{
return false;
}
for(int i=2;i*i<=n;i++)
{
if(n%i==0)
{
return false;
}
}
return true;
}
int main()
{
cout<<is_prime(1);
return 0;
}
质因数分解
#include<bits/stdc++.h>
using namespace std;
void decompose(int n)
{
for(int i=2;n>1;i++)
{
while(n%i==0)
{
cout<<i<<" ";
n/=i;
}
}
}
int main()
{
decompose(15);
return 0;
}
最大公约数和最小公倍数
用欧几里得算法求最大公约数(辗转相除法),gcd(a,b)=gcd(b,a%b)
#include<bits/stdc++.h>
using namespace std;
int gcd(int a, int b)//求a,b最大公约数
{
return b==0?a:gcd(b,a%b);//三目运算等同于二选一结构
/*以上代码等同以下代码
if(b==0)
{
return a;
}
else
{
return gcd(b,a%b);
}
*/
}
int lcm(int a, int b)//求a,b最小公倍数
{
return a*b/gcd(a,b);
}
int main()
{
cout<<gcd(15,20)<<" "<<endl;
cout<<lcm(15,20);
return 0;
}