数论

素数与约数

1.算数基本定理

任何一个大于1的正整数都能唯一分解成有限个质数的乘积

写作:

\[ n=p_1^{c1}p_2^{c2}······p_m^{cm} \]

可以直接写作:

\[ \prod_{i=1}^mp_i^{ci} \]

\(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.埃氏筛

原理:素数的倍数一定不是素数

link

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];
	}
}

例题

P3383 【模板】线性筛素数

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.整除的性质

  1. 若 $ 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) $ ,命题获证。

  1. 若 $ a \mid b , b \mid c $ ,则 $ a \mid c $ 。(传递性)

  2. 若 $ ma \mid mb (m \ne 0) $ ,则 $ a \mid b $ 。

  3. 若 $ 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 } $

其正约数个数为:

\[(c_1+1)(c_2+1)……(c_m+1)=\prod_{i=1}^mc_i+1 \]

其所有约数和为:

\[(p_1^0+p_1^1+……+p_1^{c_i})……(p_m^0+p_m^1+……p_m^{c_m})= \prod_{i=1}^m(\sum_{j=0}^{c_i}a_i^j) \]

对于一个合数 $ n^2 $ ,它的约数个数为:

\[\prod_{i=1}^mc_i \times 2+1 \]

放几张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}\)

posted @ 2022-08-03 21:17  Low_key_smile  阅读(68)  评论(0编辑  收藏  举报
//music