组合基础与数论基础
注:
组合基础
- 加法原理、乘法原理
- 排列数
: 从 选 个数排成一列的方案数 - 组合数
: 从 选 个数的方案数。(相对于排列数不考虑顺序) (选第 个 + 不选第 个) (杨辉三角)
- 二项式定理:
数论基础
- 在
大约有 个质数,平均每 个数就有 个质数。 - 找第一个大于或小于
的质数,直接从 开始枚举,然后用试除法判断,时间复杂度 - 试除法、埃氏筛、线性筛。
- 算数基本定理
- 设
是大于 的整数- 它的正约数集合是
- 它的正约数个数为
- 它的正约数之和为
- 它的正约数集合是
- 一个数
至多只有一个质因数大于 - 一个数的因子总是成对出现,除完全平方数外。
- 一个数
的因数个数小于 每个数的约数个数总和大约有 个。
质数
质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数。
在
判定
根据素数的定义,可以写出一下代码,时间复杂度
算法一,试除法:
bool is_prime(int x) {
if(x < 2)
return false;
for(int i = 2; i * i <= x; i++)
if(x % i == 0)
return false;
return true;
}
找第一个大于或小于
判断
算法二:
bool v[N];
void solve_primes(int n) {
memset(v, 0x00, siaeof(v));
v[0] = v[1] = 1;
for(int i = 2; i <= n; i++)
for(int j = 2; i * j <= n; j++)
v[i * j] = 1;
}
标记每个数的倍数,最后
时间复杂度
算法三,
bool v[N];
void solve_primes(int n) {
memset(v, 0x00, siaeof(v));
for(int i = 2; i <= n; i++)
if(!v[i])
for(int j = i; i * j <= n; j++)
v[i * j] = 1;
}
标记每个质数的倍数。j
从 i
开始是原来小于 i
的质数会标记 x * i
, 其中 x < i
。
但是像
时间复杂度
算法四,
int v[N];
::std::vector<int> ps;
void solve_primes(int n) {
memset(v, 0x00, sizeof(v));
for(int i = 2; i <= n; i++>)
{
if(!v[i])
ps.push_back(v[i] = i);
for(int j : ps)
if(j > v[i] || i * j > n)
break;
else
v[i * j] = j;
}
}
用一个数的最小质因子来标记它,
每个合数
算数基本定理、唯一分解定理
任何一个大于
设
它的正约数个数为
它的正约数之和为
质因数分解
一个数
int ps[N], c[N], p;
void dec(int x) {
p = 0;
for(int i = 2; i * i <= x; i++)
if(x % i == 0) {
ps[++p] = i, c[p] = 0;
while(x % i == 0)
c[p]++, x /= i;
}
if(x > 1) // x 是质数,或者存在一个质因数大于 sqrt(x)
ps[++p] = x, c[p] = 1;
}
时间复杂度
求 的因子集合
一个数的因子总是成对出现,除完全平方数外。
::std::vector<int> div;
void sol(int x) {
for(int i = 1; i * i <= x; i++)
if(x % i == 0) {
v.push_back(i);
if(i * i != x)
v.push_back(x / i);
}
}
时间复杂度
求 的因子集合
倍数法、刷表法 : 枚举一个数,看它是那个数的因数。
::std::vector<int> div[N];
void sol(int n) {
for(int i = 1; i <= n; i++)
for(int j = 1; i * j <= n; j++)
div[i * j].push_back(i);
}
时间复杂度
约数与倍数
对于
对于
定理
根据定义,显然有
定理 1
证明:
设
反证法。假设
定理 2
证明:
设
有
则原命题得证。
定理 3
证明:
则原命题得证。
定理 4 更相减损术
证明:
设,集合
对于
对于
定理 5 辗转相除法、欧几里得算法
证明:
当
当
对于
对于
本文作者:kuailedetongnian
本文链接:https://www.cnblogs.com/kuailedetongnian/p/18250728
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步