Avatar

一个兴趣使然的追梦人

关于一些数学知识

素数

素数(也叫质数)是指:一个大于 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\):是这些素数出现的次数(也就是指数)。
posted @ 2026-05-19 22:38  hermanO  阅读(19)  评论(0)    收藏  举报