带余除法
所谓带余除法指的是对于所有的a,b存在唯一的k和r,使得a=kb+r成立,这里有两个关键点:
①一定存在这种k,r,使得a=kb+r成立。
②k和r是唯一的,也即不会存在第二对。
算数基本定理(质因子分解)
任意大于1的正整数都可以分解为一系列质因子的乘积,并且这种分解是唯一的,也即有以下公式成立:
其中pi指的是从小到大第i个质数。
正整数的质因子分解式是恒成立的,并且分解的结果是唯一的,实际场景中适用性很高。
素数是无穷的
反证法:
可以通过质因子分解定理来构建一个比最大素数更大的素数出来:
假设素数是有限的,那么我们可以构建这样一个数,他是所有素数的乘积+1,那么该数可以表示为下面这个形式:
显然a不是任何素数的倍数,而a的质因子分解式一定存在,所以a只能自身为质数,这与pn是最大的质数是矛盾的。也即素数是无穷的。
素数定理
该定理阐述了素数分布的一些性质,但是目前我接触很少,公式表述如下:
π(n)表示小于n的素数个数。
快速因子定理
如果a是一个合数,那么a一定有一个小于√a的真因子。所以对于寻找a的因子的算法,我们可以将时间复杂度降低到√n。
埃拉托斯特筛法
该筛法是最简单的利用素因子分解和快速因子定理得到的寻找所有素数,或者所有合数质因子的方法。
code
#include<bits/stdc++.h>
using namespace std;
int main(){
std::ios::sync_with_stdio(false);
vector<int> ans;
int *tag