数论
db516cde-4a65-4cf9-a54e-6690a0111728$$ \texttt{HSAtHNU2023.5.27} $$
数论
更新栏
$upd$ $2023.5.31$ 这次更新了很多内容,从质因数分解到$\operatorname{lcm}$
$upd$ $2023.6.21$ 这次更新了一些 $\text{Markdown}$ 语法,具体如下:
-
$\gcd$ 和 $\operatorname{lcm}$,使用了
\gcd和\operatorname{lcm}; -
把两个质数筛的标题和
U249927改成了\texttt{}格式; -
增加了第一行的 $\texttt{HSAtHNU}$ 与日期。
$upd$ $2023.7.3$ $\text{Markdown}$ 语法修复:
-
字母与汉字之间的空格
-
把直接打的
|和≥换成了\mid和\ge$upd$ $2023.7.30$ 修正章节素数筛,修改了埃氏筛和欧拉筛(代码错了啊喂)
素数
又称质数,是整数的基本元素
素数判定:
bool isprime(int n){
for (int i = 2; i * i <= n; i++){
if (n % i == 0){
return 0;
}
}
return 1;
}
$\texttt{Eratosthenes}$ 埃氏筛
原理是一个素数的整数倍数不可能是素数
示例代码:
void Sieve(int n){
for (int i = 2; i <= n; i++){
if (!v[i]){
prime[++cnt] = i;
for (int j = i; i <= n / j; j++){
v[i * j] = 1;
}
}
}
}
$\texttt{Euler}$ 欧拉筛
原理是用一个数的最小素因子筛去其范围内的素数倍数
示例代码:
void Sieve(int n){
for (int i = 2; i <= n; i++){
if (!v[i]){
prime[++tot] = i;
}
for (int j = 1; j <= tot && i * prime[j] <= n; j++){
v[i * prime[j]] = prime[j];
if (i % prime[j] == 0){
break;
}
}
}
}
$\texttt{U249927}$ 线性筛质数
#include<bits/stdc++.h>
using namespace std;
int n,q;
int mrk[100000010];
int prm[100000010];
void prime(){
int index = 0;
for (int i = 2; i < n; i++){
if (mrk[i] == 0){
prm[++index] = i;
}
for (int j = 1; j <= index && prm[j] * i < n; j++){
mrk[i * prm[j]] = 1;
if (i % prm[j] == 0) break;
}
}
}
int main(){
cin >> n >> q;
prime();
int k;
for (int i = 1; i <= q; i++){
cin >> k;
cout << prm[k] << endl;
}
return 0;
}
等会,我不应该在这里贴U249927的代码的呀
质因数分解
把一个$\ge2$的正整数拆分成素数幂的乘积,称为质因数分解
举$3 $个栗子:
24 = 2 × 2 × 2 × 3 = 2³ × 3¹
33 = 3 × 11 = 3¹ × 11¹
17 = 17 = 17¹
示例代码:
void Divide(int n){
int i = 2;
while (n > 1){
if (n % i == 0){
cout << i << ' ';
n /= i;
}
else i++;
}
}
唯一分解定理
任意 $\ge2$ 的正整数的质因数分解方案是唯一的
这个定理是整个数论研究的基石:“整数的基本元素是质数”
因此也被称为算术基本定理
示例代码:
vector<int> Divide(int n){
vector<int> V;
for (int i = 2; i * i <= n; i++){
while (n % i == 0){
V.push_back(i);
n /= i;
}
}
if (n > 1) V.push_back(x);
return V;
}
整除
-
如果 $a$ 被 $p$ 整除,也就是说 $a$ 是 $p$ 的倍数,那么记为 $p \mid a$
-
如果 $a$ 是 $p$ 的倍数,那么 $a$ 的倍数也是 $p$ 的倍数,即 $p \mid ab (b∈Z+)$
可以由此推导出整除的“传递性”:若 $a\mid b,b\mid c$,则有$a\mid c$
关于整除
-
若 $2$ 能整除 $a$ 的末位,则 $2 \mid a$
-
若 $4$ 能整除 $a$ 的末两位,则 $4 \mid a$
-
若 $8$ 能整除 $a$ 的末三位,则 $8 \mid a$
-
若 $3$ 能整除 $a$ 的各位数字之和,则 $3 \mid a$
-
若 $9$ 能整除 $a$ 的各位数字之和,则 $9 \mid a$
-
若 $11$ 能整除 $a$ 的偶位数字和与奇位数字和之差,则 $11 \mid a$
约数
除了完全平方数,约数总是成对出现的
$N$的约数个数上限约 $2\times\sqrt n$
$\gcd$
设 $a,b$ 是不同时为 $0$ 的整数,$c$ 为满足 $c \mid a$ && $c \mid b$ 的最大整数,则称 $c$ 是 $a,b$ 的最大公约数,记为 $\gcd(a,b)$
$\gcd(a,b)$ 的常用性质:
-
$\gcd(a \times k,b \times k) = k \times \gcd(a,b)$
-
若 $c \mid a$ && $c | b$,则 $c \mid \gcd(a,b)$
-
$\gcd(a,b) = \gcd(a,k \times a + b)$
$\operatorname{lcm}$
$a,b$ 的最小公倍数,记作 $\operatorname{lcm}(a,b)$
$\operatorname{lcm}(a,b)$ 的常用性质:
-
$\operatorname{lcm}(a,b) \times \gcd(a,b)=a \times b$
-
若 $a \mid m$ && $b \mid m$,则 $\operatorname{lcm}(a,b) \mid m$
-
$\operatorname{lcm}(m \times a,m \times b)=m \times \operatorname{lcm}(a,b) (m∈Z+$)

浙公网安备 33010602011771号