数论
素数与约数
1.算数基本定理
任何一个大于1的正整数都能唯一分解成有限个质数的乘积
写作:
可以直接写作:
\(pi\) 都是质数且满足 $ p1<p2<······<pm$ , \(ci\) 都是正整数。
2.质数分布定理
对于任意正整数 $ x $ ,定义 $ f(x) $ 为不大于 $ x $ 的质数个数,则有 $ f(x)\approx x / ln x $ ,第 $ n $ 个质数的渐近值 $ p(n) \approx n ln n$ 。
3.若存在一个正整数 $ n $ 为合数,则存在一个数 $ k $ ,满足 $ 2 $ $ \le $ $k \le $ $ \sqrt{n} $ 且 $ k|n $ 。
证明过程:
首先,我们要证明一个结论:
如果 \(m1*m2=n\) ,那么,$ m1 $ 和 $ m2 $ 必定有一个大于 $ \sqrt{n} $,一个小于 $ \sqrt{n} $ 。
然后我们去证明上面的结论,假如我们在 $ 2—sqrt(n)$ 没有找到 $ n $ 的因数,在 $ sqrt(n)—n $ 中找到了因数 $ m1 $ ,根据上面的结论,另一个因数 $ m2 $ 肯定在 $ 2—sqrt(n) $ 之间,与在 $ 2—sqrt(n) $ 之间没有找到因数矛盾,命题获证。
4.素数的筛选
1.埃氏筛
原理:素数的倍数一定不是素数
code
for(int i=2;i<=n;++i)
if(isprime[i]==1)
{
for(int j=2*i;j<=n;j+=i)
isprime[j]=0;
}
埃氏筛的复杂度已经非常接近线性了,但是不能完全达到线性,因为它在筛的时候会有重复,比如说12,它在被2筛过之后,循环到3,4,6的时候都会再重新筛一遍。
2.线性筛
针对上面的埃氏筛存在的问题,我们可以让每一个合数只被它的最小质因数筛掉。
code
//v[i]代表i的最小质因数
for(int i=2;i<=n;++i)
{
if(v[i]==0)
v[i]=i,pri[++cnt]=i;
for(int j=1;j<=cnt;++j)
{
if(pri[j]>v[i] || pri[j]>n/i) break;
v[i*pri[j]]=pri[j];
}
}
例题
5.一个正整数 $ n $ ,至多只有一个大于 $ sqrt(n) $ 的质因子
证明:设 $ p,q≥ sqrt(n) $ , $ p | n $ , $ q | n $ ,那么我们有 $ pq | n $ , $ pq > n $ , 很显然矛盾,命题获证。
6.设 $ a $ , $ b $ 是两个整数,且 $ b != 0 $ ,如果存在整数 $ c $ ,则存在唯一的整数 $ q,r $ , 使得 $ a=qb+r (0\le r < b)$ ,该式被称为带余除法,并记 $ r= a\mod b $ 。
7.整除的性质
- 若 $ a \mid b $ 且 $ a \mid c $ ,则 $ \forall x,y $ ,有 $ a \mid xb+yc $ 。
证明:
设 $ b=an, c=am $ ,则 $ xb+yc=xan+yam=a(xn+ym) $ ,很明显 $ a \mid a(xn+ym) $ ,命题获证。
-
若 $ a \mid b , b \mid c $ ,则 $ a \mid c $ 。(传递性)
-
若 $ ma \mid mb (m \ne 0) $ ,则 $ a \mid b $ 。
-
若 $ a \mid b $ 且 $ b \mid a $ ,则 $ a=\pm b $ 。
8.算术基本定理的推论
对于唯一分解的正整数 $ n= p_1{c_1}p_2……p_m^{c_m} $
其正约数集合可写作 $ { p_1{c_1}p_2……p_m^{b_m}| 0 \le b_i \le c_i } $
其正约数个数为:
其所有约数和为:
对于一个合数 $ n^2 $ ,它的约数个数为:
放几张PPT
同余定理
1.定理
同余问题
1.同余定义
给定整数 \(m\) ,若两个整数 \(a\) , \(b\) 除以 \(m\) 所得余数相同,称 \(a\) 和 \(b\) 对模 \(m\) 同余,表示为:
\(a≡b(mod m)\)
若一个整数集合中所有数模 \(m\) 的余数相同,这个集合中的数都称为模 \(m\) 的同余类。每个同余类中的任意两个整数对模 \(m\) 同余。
定理1
\(a≡b(mod m)\) ,当且仅当 $m∣a−b $
证明:
设 \(r\) 为 \(a\) , \(b\) 模 \(m\) 的余数,所有可以得到
\(a=k_1\times m+r\),
\(b=k_2\times m+r\),
$a-b=(k_1-k_2)\times ma=k $,满足 \(m∣a−b\) ,
反之亦然。
定理2
\(a≡b(mod m)\) ,当且仅当存在整数 \(k\) ,使得 \(a = b + k × m\)
证明:
与定理 \(1\) 类似,
\(a = k 1 × m + r\) ,
\(b = k 2 × m + r\) ,
\(a + k 2 × m + r = k 1 × m + r + b\)
\(a=k_1\times m+r\),
\(b=k_2\times m+r\)
\(a+k_2\times\) \(m+r=k_1\times m+r+ba=k\)
即 $ a = b + ( k 1 − k 2 ) × m = b + k × m$
2.同余有关定理
(1)欧拉定理
1.1互质
公约数只有1 的两个 整数,称为互质。\(a\)与\(b\)互质,则写作 \((a,b)=1\) 。
1.2质因数
质因数指能整除给定整数的质数,例如6的质因数为2和3。
1.3余数的基本性质
\((a+b)mod c\) \(=\) \(((a mod c)+(b mod c))mod c\)
\((a-b)mod c\) \(=\) \(((a mod c)-(b mod c))mod c\)
\((a*b)mod c\) \(=\) \(((a mod c)*(b mod c))mod c\)
1.4同余
给定一个正整数m,如果两个整数a和b满足a-b能够被m整除,那么就称整数a与b对模\(m\)同余,记作\(a≡b(mod m)\)。
2.欧拉函数
2.1定义
对正整数\(n\),欧拉函数是小于n的正整数中与n互质的数的数目.
2.2欧拉函数通式
欧拉函数通式:
\(φ(n)=n*(1-1/p1)*(1-1/p2)*(1-1/p3)*(1-1/p4)*……*(1-1/pn)\)
\(p\)为\(n\)的质因数,\(n\)是不为\(0\)的正整数,\(φ(1)=1\),质数的\(φ\)为自己减\(1\)例如\(φ(2)=1\)
代码
typedef long long ll;
ll Eular(ll n)
{
ll ans=n;
for(int i=2; i*i <= n; ++i)
{
if(n%i == 0)
{
ans = ans/i*(i-1);
while(n%i == 0)
n/=i;
}
}
if(n > 1) ans = ans/n*(n-1);
return ans;
}
还可以在素数筛的同时求欧拉函数,效率更高。
2.欧拉定理
3.1定义
对任意两个正整数 a, n,如果两者互质,那么 \(aφ(n)≡1(mod n)\)。
3.2证明
先设集合P为小于n且与n互质的正整数集合\({q1 , q2 , q3 , … , qφ(n)}\),这个集合有两个性质:
\(q_i\)与\(n\)互质
\(q_i\)模n后各不相同
再设集合\(Q\)为\({ a*q_1%n , a*q2%n , a*q3%n , … , a*qφ(n)%n}\)
可证:
因为\(a\)与\(n\)互质,所以\(a*q%n\)也与\(n\)互质,即Q中各元素均与n互质
通过反证法,若\(a*qi%n=a*qj%n\),那么
\(a*qi-a*qj=0 --> a*(qi-qj)=0 --> qi-qj=0 --> qi=qj\)
因为先前集合P中qi各不相同,所以不成立,可得集合\(Q\)中元素各不相同
由上可得\(P\),\(Q\)均为包含\(φ(n)\)个小于\(n\)且\(n\)互质且各不相同的元素集合,而这样的集合只有一个,可得\(P=Q\);
所以集合\(P\)元素的乘积和集合\(Q\)元素的乘积相等:
\(q1 * q2 * q3 * … * qφ(n)=(a*q1%n) * (a*q2%n) * (a*q3%n) * … * (a*qφ(n)%n)\)
\(q1 * q2 * q3 * … * qφ(n)=aφ(n) * (q1 * q2 * q3 * … * qφ(n))%n\)
同时除\(q1-qφ(n)\)即可得
$ aφ(n)≡1(mod n) $
3.3费马小定理
若存在整数\(a\),\(p\),\(a\)为整数,\(p\)为质数,那么\(a(p-1)≡ 1(mod p)\)。
费马小定理是欧拉定理的一种特殊情况(当\(n\)为质数时\(φ(n)为n-1\))
3.应用及拓展
4.1求逆元
定义:
对于\(a*b≡1(mod p)\),\(b\)是\(a\)在模\(m\)下\(a\)的逆元。(只有\(a\)与\(p\)互质时存在逆元)
意义
余数的基本性质中只包括加减乘,当面对除法时,逆元就相当于是个倒数,可以将除法变为乘法,方便进行模运算。
应用
当p为质数时由费马小定理\(a(p-1)≡ 1(mod p)\)得,逆元b为\(a(p-2)\);
当p过大时需要使用快速幂进行计算;
当p不是质数时则需使用欧拉定理,提前求出p的欧拉函数,逆元\(b\)为\(a(φ(n)-1)\)。
时间复杂度为\(O(nlongn)\)
4.2欧拉降幂
在求解\(a^bmod p\)时,如果\(b\)过大,使用暴力和快速幂是无法求解的,所以这时候就需要用到欧拉降幂来求解。
欧拉降幂公式为 \(a^bmod p = a\)^\((b mod φ( p )+φ( p )) mod p\)
代码:
ll quickpow(ll a,ll b,ll mod)
{
ll res=1%mod;
while (b)
{
if (b & 1) res = (long long)res * a % mod;
a=(long long)a * a % mod;
b >>= 1;
}
return res;
}
ll eular(ll n)
{
ll ans = n;
for(int i=2; i*i <= n; ++i)
{
if(n%i == 0)
{
ans = ans/i*(i-1);
while(n%i == 0)
n/=i;
}
}
if(n > 1) ans = ans/n*(n-1);
return ans;
}
ll eularpow(ll a,ll b,ll p)
{
ll phi = eular(p);
ll tb = 0;
tb=b%phi+phi;
return quickpow(a,tb,p);
}
int main()
{
ll a,b,p;
cin>>a>>b>>p;
cout<<eularpow(a,b,p);
return 0;
}
(2)费马小定理
内容:若 $ p $ 为质数,则 $ \forall a \in N , p \mid a $ ,有 $ a^p \equiv a \pmod{p} $ 。
证明:
$\forall i,j \in [1,p) $,有 $ a_i \not\equiv a_j \pmod{m} $
$\Rightarrow $ $ { a_i | i \in [1,p)} $ 为模 $ p $ 的完全剩余系(除模 $ p $ 为 $ 0 $ 的集合外)
$\Rightarrow $ $ 1 \times a \times 2 \times a \times …… \times (p-1) \times a \equiv (p-1)! \pmod{p}$
$\Rightarrow $ \(a^{p-1} \equiv 1 \pmod{m}\)(费马小定理的推论)
$\Rightarrow $ \(a^p \equiv a \pmod{p}\)