数学基础
数学基础
- 欧拉函数
int phi(int n)
{
int m = (int)sqrt(n);
int ans=n;
for (int i=2;i<=m;i++)
if (n%i==0)
{
ans=ans / i * (i-1);
while (n%i==0) n/=i;
}
if (n>1) ans=ans / n * (n-1);
return ans;
}
- 欧拉函数表
void phi_table(int *a, int n)
{
memset(a,0,sizeof(int)*(n+1));
a[1]=1;
for (int i=2; i<=n; i++)
if (!a[i])
for (int j=1; j<=n; j+=i)
{
if (!a[j]) a[j]=j;
a[j]=a[j]/i*(i-1);
}
}
- gcd lcm
int gcd(int a, int b) { return (b==0) ? a : gcd(b, a%b); }
int lcm(int a, int b) { return a / gcd(a,b) * b; }
4.素数筛
bool visited[N]; // 如果被筛,设为true
int primes[N], n=0; // 素数表
memset(visited,0,sizeof(visited));
for (i=2;i<N;i++)
if (!visited[i])
{
primes[n++]=i;
for (j=i+i;j<N;j+=i) visited[j]=true;
}
- 不相邻组合
\(H(n,m)={n-m+1 \choose m}\) - 排列组合
排列:指从给定个数的元素中取出指定个数的元素进行排序
组合:组合则是指从给定个数的元素中仅仅取出指定个数的元素,不考虑排序
\(A_n^m = \frac{fac[n]}{fac[n-m]}\\ C_n^m={n \choose m} = \frac{fac[n]}{fac[m]\cdot fac[n-m]} = \frac{A_n^m}{fac[m]}\)
- 加法原理
第一类办法中有 \(m_1\) 种不同的方法,在第二类办法中有 \(m_2\) 种不同的方法,……,在第 \(n\) 类办法中有 \(m_n\) 种不同的方法,那么完成这件事共有 \(N=m_1+m_2+m_3+…+m_n\) 种不同方法 - 乘法原理
做一件事,完成它需要分成 \(n\) 个步骤,做第一步有 \(m_1\) 种不同的方法,做第二步有 \(m_2\) 种不同的方法,……,做第\(n\) 步有 \(m_n\) 种不同的方法,那么完成这件事共有 \(N=m_1×m_2×m_3×…×m_n\) 种不同的方法。
- 二项式定理
\(\large{(a+b)^n=\sum_{i=0}^n{n\choose i}a^ib^{n-i}}\\\)
很好理解,每个 \((a+b)\) 中可以选出 \(a\) 或 \(b\),最终有 \(k\) 个 \(a\) 的方案数就是 \(n \choose k\)
其他变形,在部分题可以应用
\(\large{(a-b)^n=\sum_{i=0}^n(-1)^{n-i}{n\choose i}a^ib^{n-i}}\\
\large{\frac{(a+b)^n+(a-b)^n}{2}=\sum_{i为偶数}^n{n \choose i}a_{n-i}b^i}\)
- 杨辉三角
![]()
容易发现其与二项式系数有着对应关系
posted on 2022-05-08 19:47 sflenewforce 阅读(87) 评论(0) 收藏 举报

浙公网安备 33010602011771号