关于一些数学知识
素数
素数(也叫质数)是指:一个大于 1 的自然数,除了 1 和它本身以外,不再有其他因数的数。
合数
合数是指:一个大于 1 的自然数,除了 1 和它本身以外,还有其他因数的数。
因数
定义:如果整数 \(a\) 除以整数 \(b\) 的余数为 0,那么 \(b\) 就是 \(a\) 的因数。
质因数
定义:如果一个数是 \(a\) 的因数,而且这个数本身还是个素数,那它就叫 \(a\) 的质因数。
什么是平凡因子?
对于任何一个整数 \(n\),它总是具有一些显而易见的、形式上的因子。这些因子被称为“平凡因子”。
1.对于整数 \(n\) 而言:
\(1\) 是平凡因子(因为任何整数都能被 \(1\) 整除)。
\(n\) 本身 是平凡因子(因为任何整数都能被自身整除)。
注:有时在考虑负数时,\(-1\) 和 \(-n\) 也被视为平凡因子。
2. 为什么叫“平凡”?
在数学中,“平凡”(Trivial)一词通常用来描述那些:
显而易见、不需要复杂推导即可得出的结论。
在特定结构中总是存在、无法提供“额外信息”的简单特例。
因此,称它们为“平凡因子”,是因为这些因子在任何整数的定义中必然存在,它们无法揭示该整数内部的构成规律。
3. “平凡”与“非平凡”的对比
与“平凡因子”相对应的是“非平凡因子”(Nontrivial Factors)。
非平凡因子是指除了 \(1\) 和 \(n\) 以外的因子。
关于素数的筛法
Way一.试除法(常用与素数筛)
代码实现:
\(Code\):
int n ;
cin >> n ;
for(int i = 2;i <= n;i++){
int tep = i ;
map<int,int>mp;
for(int j = 2;j * j <= tep;j++ ){
while(tep % j == 0){
tep /= j ;//tep能被j整除所以j是tep的一个质因子
mp[j]++ ;
}
}
if(tep > 1)mp[tep]++ ;//由基本定理1解释
}
\(conclusion\):
每一个能整除 \(n\) 的因子 \(j\),由于它前面的“因数”已经被剔除了,它自己必然是一个无法再分解的质数。
1.基于“最小因子必为质数”的性质
在数学中,有一个基础定理:
“若\(n>1\),则\(n\)的大于\(1\)的最小正因子必然为质数"
数学描述:
当我们从小到大进行试除时,第一个能被整除 \(n\) 的数 \(j\) 必然是n的最小非平凡因子。根据上述定理,\(j\) 必然是质数。当我们执行\(n\) = \(n\) / \(j\) 并继续从小到大寻找新的最小因子时,由于操作的单调性,每一个被确定的因子都满足“当前剩余待分解部分的最小因子”这一属性,因此他们全是质数。
2. 基于“素因数分解的唯一性”
利用算术基本定理,任何整数 \(n\) 都可以唯一地表示为:
\[n = p_1^{a_1} \cdot p_2^{a_2} \cdots p_k^{a_k} \quad (p_1 < p_2 < \cdots < p_k)
\]
数学描述:
试除法是一个逐项剥离的过程。
- 当 \(j = 2\) 时,我们剥离了 \(p_1\) 的所有幂次 \(a_1\)。
- 此时剩余部分 \(n' = p_2^{a_2} \cdots p_k^{a_k}\)。
- 由于 \(p_2 > p_1\),在 \(j\) 增长到 \(p_2\) 之前,任何 \(j \in (p_1, p_2)\) 都不可能整除 \(n'\)。
- 因为若存在合数 \(m \in (p_1, p_2)\) 能整除 \(n'\),则 \(m\) 的质因子必属于集合 \(\{p_2, \dots, p_k\}\),这与 \(m < p_2\) 矛盾。
Way2:埃氏筛
思想:先假设所有的数都是素数,由于素数的倍数一定是合数,用1来标记合数,数值为0的自然就是质数了
\(Codetemplate\)
void sieve_prime(int n,vector<bool>&a)
{
a[0] = a[1] = 1 ;//由于0,1不是质数,所以令他们为1
for(int i = 2;i * i <= n;i++)
{
if(a[i] == false){
for(int j = i * i;j <= n;j+=i)
{
a[j] = 1 ;
}
}
}
}
唯一分解定理
即任何一个数都可以表示成多个不同的质数的幂次方相乘
数学化表达如下:
核心算式
任何一个大于 \(1\) 的整数 \(n\),都可以写成:
\[n = p_1^{a_1} \times p_2^{a_2} \times p_3^{a_3} \times \cdots \times p_k^{a_k}
\]
这里的符号代表:
- \(p_1, p_2, \dots, p_k\):是不同的素数(比如 \(2, 3, 5 \dots\)),我们通常习惯从小到大排。
- \(a_1, a_2, \dots, a_k\):是这些素数出现的次数(也就是指数)。

浙公网安备 33010602011771号