【自学笔记】基础数论(费马小定理、素数、欧拉函数、欧拉定理)

数论基础

费马小定理

\(p\)为质数,\(\gcd(a,p)=1\),则\(a^{p-1}\equiv1(\mod p)\)

另一形式:对于任意整数\(a\),都有\(a^p\equiv a(\mod p)\)

证明

构造一个序列\(A=\{0,1,2,3,……,p-1\}\),已知\(A\)\(p\)的完全剩余系

取一个不为\(p\)倍数的数\(a\),则\(a\)与序列\(A\)中的数一一相乘得到的序列\(B\)也是\(p\)的完全剩余系

解释:反证法,假设序列\(B\)不是\(p\)的完全剩余系,即存在\(A_ia\equiv A_ja(\mod p)(A_i>A_j)\)

\(\therefore (A_i-A_j)a\equiv0(\mod p)\Rightarrow p|(A_i-A_j)a\)

\(\because \gcd(a,p)=1,A_i-A_j\in[1,p-1]\)

故不存在\(p|(A_i-A_j)a\)

综上,每个\(A_ia(\mod p)\)都对应一个\(A_j(\mod p)\)\(p\)个元素组成了完全剩余系

显然\(0·a\)对应\(0\)

\(f=(p-1)!\),则\(a^{p-1}f\equiv f(\mod p)\Rightarrow a^{p-1}\equiv 1(\mod p)\)

得证

关于另一形式:

对于不是\(p\)的倍数\(a\),可由\(a^{p-1}\equiv 1(\mod p)\),得到\(a^p\equiv a(\mod p)\)

对于是\(p\)的倍数\(a\)\(a\mod p=0,a^p\mod p=0\Rightarrow a^p\equiv a(\mod p)\)

故另一形式对任意整数\(a\)都通用

素数

素数计数函数:\(\pi(x)_{\lim x\rightarrow \infty}=\frac{x}{\ln(x)}\)

素数筛

//埃氏筛 时间复杂度O(n)
void prime(int n){
    p[1]=1;
    for(int i=2;i*i<=n;i++){
        if(p[i]) continue;
        for(int j=i*i;j<=n;j+=i) p[j]=1;
    }
}
//欧拉筛 时间复杂度O(n) 比埃氏筛快
void prime(int n){
    for(int i=2;i<=n;i++){
        if(!v[i]) p[cut++]=i;
        for(int j=0;p[j]<=n/i;j++){
            v[p[j]*i]=1;
            if(i%p[j]==0) break;
        }
    }
}

素数判断

//时间复杂度O(n)
bool isPrime(int num) {
    if(num==1) return 0;
    if(num==2||num==3) return 1;
    if(num%6!=1&&num%6!=5) return 0 ;
    int tmp=sqrt(num);
    for(int i=5;i<=tmp;i+=6)
	    if(num%i==0||num%(i+2)==0)
	    	return 0;
    return 1;
}

解释:所有大于3的素数都可以表示为\(6n\pm1\)的形式

素性判断

//时间复杂度O(klog3(n))
ll qpow(ll a,ll b,ll c) {
	ll ans=1;
	while(b){
		if(b&1) ans=(ans*a)% c;
		a=(a*a)%c;
		b>>=1;
	}
	return ans;
}
bool millerRabin(ll n){
	if (n<3||n%2==0) return n==2;
	ll a=n-1,b=0;
	while(a%2==0) a/=2,++b;
	for(int i=1,j;i<=10;++i) {
		ll x=rand()%(n-2)+2,v=qpow(x,a,n);
		if(v==1) continue;
		for(j=0;j<b;++j) {
			if(v==n-1) break;
			v=v*v%n;
		}
		if(j>=b) return 0;
	}
	return 1;
}

解释:

实质还是依赖费马小定理逆推做素数判断测试(事实上逆推是不成立的,所以只是概率性测试)

比起费马测试,将\(a^{n-1}\equiv1(\mod n)\)\(n-1\)开方进行了优化

优化依据:对于素数\(\forall p(p\neq2)\),如果\(a^2\equiv 1(\mod n)\),则\(a=1\)或者\(a=n-1\)(二次剩余)

欧拉函数

\(\phi(n)\)表示在\([1,n]\)的范围内与\(n\)互质的数有几个

基础公式

  • \(\phi(1)=1\)
  • 如果\(n\)为质数,则\(\phi(n)=n-1\)
  • 如果\(n\)为某质数的次方,则\(\phi(p^k)=p^k-p^{k-1}\)
  • 对于任意\(n\)\(\phi(n)=n\prod^s_{i=1}(1-\frac{1}{p_i})\)\(s\)\(n\)的质因子个数

关于最后一项证明:

\(n=pm\)\(p\)为数

\(1\)\(n\)可以被分成\(p\)份,\([1,m],[m+1,2m],……,[(p-1)m+1,pm]\)

由欧几里得公式\(\gcd(a,b)=\gcd(a\%b,b)\)倒推,得\(\gcd(a,b)=\gcd(a+xb,b)\)

故每份之中,与\(m\)互质数量相同

\(\gcd(b,m)=1\)

\(p|m\)时,\(\gcd(b,p)=1\),故\(\phi(n)=p\phi(m)\)

\(p\nmid m\)时,\(\gcd(b,p)\)不一定为1,则\(\phi(n)=p\phi(m)-\{与m互质,与p不互质的数的个数\}\)

已知与\(p\)不互质的数有,\(p,2p,3p,……,mp\)

参照费马小定理的证明过程,已知这些数构成\(m\)的完全剩余系,相当于之前\(p\)份中的一份,其中与\(m\)互质的数有\(\phi(m)\)

\(\phi(n)=\phi(m)(p-1)\)

递推得\(\phi(n)=\prod^s_{i=1}(p_i^k-p_i^{k-1})=n\prod^s_{i=1}(1-\frac{1}{p_i})\)

函数性质

  • 欧拉函数为积性函数,\(\gcd(a,b)=1\Rightarrow\phi(ab)=\phi(a)\phi(b)\),由于\(\phi(2)=1\),当\(n\)为奇数时,有\(\phi(2n)=\phi(n)\)

由公式可推导出,故不再证明

  • \(n=\sum_{d|n}\phi(d)\)

证明:

\(n=\sum_{i=1}^nf(i)\)\(f(i)\)表示\(\gcd(k,n)=i(k\in[1,n])\)\(k\)的个数

显然\(i\)只会是\(n\)的因数,故\(n=\sum_{d|n}f(d)\)

\(\because\gcd(k,n)=d\Rightarrow \gcd(\frac{k}{d},\frac{n}{d})=1\)

\(\therefore f(d)=\phi(\frac{n}{d})\)

根据约数性质:当\(d\)遍历\(n\)的全体约数时,\(\frac{n}{d}\)也遍历\(n\)的全体约数

\(n=\sum_{d|n}\phi(\frac{n}{d})=\sum_{d|n}\phi(d)\)

  • \(\gcd(a,b)=d\)时,\(\phi(ab)=\frac{\phi(a)\phi(b)d}{\phi(d)}\)

证明:

\(d=p_i^{k_i}p_{i+1}^{k_{i+1}}…p_j^{k_j}\)

\(a=p_i^{m_i}p_{i+1}^{m_{i+1}}…p_j^{m_j}*A\)

\(b=p_i^{n_i}p_{i+1}^{n_{i+1}}…p_j^{n_j}*B\)

【注:\(\gcd(a,b)=d\Rightarrow k_i=min(m_i,n_i)\)

\(ab=p_i^{m_i}p_i^{n_i}p_{i+1}^{m_{i+1}}p_{i+1}^{n_{i+1}}…p_j^{m_j}p_j^{n_j}*A*B\)

\(A,B\)为去掉与\(d\)相同的素因子后剩下的素因子次方

\(\phi(d)=p_i^{k_i}p_{i+1}^{k_{i+1}}…p_j^{k_j}(1-p_i^{-1})(1-p_{i+1}^{-1})…(1-p_j^{-1})\)

\(\phi(a)=p_i^{m_i}p_{i+1}^{m_{i+1}}…p_j^{m_j}(1-p_i^{-1})(1-p_{i+1}^{-1})…(1-p_j^{-1})*\phi(A)\)

\(\phi(b)=p_i^{n_i}p_{i+1}^{n_{i+1}}…p_j^{n_j}(1-p_i^{-1})(1-p_{i+1}^{-1})…(1-p_j^{-1})*\phi(B)\)

\(\phi(ab)=p_i^{m_i}p_i^{n_i}p_{i+1}^{m_{i+1}}p_{i+1}^{n_{i+1}}…p_j^{m_j}p_j^{n_j}(1-p_i^{-1})(1-p_{i+1}^{-1})…(1-p_j^{-1})*\phi(A)*\phi(B)\)

\(\therefore(1-p_i^{-1})(1-p_{i+1}^{-1})…(1-p_j^{-1})=\frac{\phi(d)}{d}\)

\(\phi(ab)=\frac{\phi(a)\phi(b)d}{\phi(d)}\)

  • 在int范围内,\(\phi_{max}=1600\)

代码

//欧拉函数
int phi(int n) {
  int 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;
}
//欧拉打表
void phi(int n){
    for(int i=1;i<=n;i++) p[i]=i;
    for(int i=2;i<=n;i++)
    {
        if(p[i]==i){
            for(int j=i;j<=n;j+=i)
            {
                p[j]=p[j]/i*(i-1);
            }
        }
    }
}

欧拉定理

\(\gcd(a,m)=1\),则\(a^{\phi(m)}\equiv1(\mod m)\)

简单证明:

\(r_1,r_2…r_{\phi(m)}\)为模\(m\)的既约剩余系(即余数与\(m\)互质的一批余数互不相同的数的集合)

\(\gcd(r_i,m)=1,\gcd(a,m)=1 \Rightarrow \gcd(ar_i,m)=1\)

\(ar_1,ar_2…ar_{\phi(m)}\)也为模\(m\)的既约剩余系

剩余证明与费马小定理的证明相似

可以看出费马小定理是欧拉定理的特殊情况,当\(m\)为质数时,\(\phi(m)=m-1\)

扩展欧拉定理

\[a^b\equiv\left\{ \begin{eqnarray} &a^{b\mod \phi(m)},&\gcd(a,m)=1\\ &a^b,&\gcd(a,m)\neq1,b<\phi(m) (\mod m)\\ &a^{(b\mod \phi(m))+\phi(m)},&gcd(a,m)\neq1,b\geqslant\phi(m) \end{eqnarray} \right. \]

第三项证明:

\(m=sp^r,gcd(s,p)=1\)

\(p^{\phi(s)}\equiv 1(\mod s)\)

\(\because\phi(m)=\phi(s)\phi(p^r)\Rightarrow \phi(s)|\phi(m)\)

\(\therefore p^{\phi(m)}\equiv 1(\mod s)\)

根据同余性质 \(p^{\phi(m)}p^r\equiv p^r(\mod sp^r)\Rightarrow p^{\phi(m)+r}\equiv p^r(\mod m)\)

\(p^c\equiv p^{c-r+r}\equiv p^{\phi(m)+c}(\mod m),c\geqslant r\)

显然\(r\leqslant\phi(m)\) (因为\(\phi(m)=\prod^s_{i=1}(p_i^{r_i}-p_i^{r_{i}-1})\)\(r\)线性增长时,\(p^r-p^{r-1}\)级数增长)

故当\(c\geqslant\phi(m)\)时,\(p^c\equiv p^{\phi(m)+c}(\mod m)\)也成立

再由于\(p^{\phi(m)}\equiv p^{\phi(m)+r-r}\equiv p^{r-r}\equiv 1(\mod m)\)

所以\(p^c\equiv p^{c\mod \phi(m)+\phi(m)}(\mod m)\)

质数幂次类同,\((p^k)^c\equiv (p^k)^{c\mod \phi(m)+\phi(m)}(\mod m)\)

根据算法基本定理\(a=\prod p_i^{k_i}\),故\(a^b\equiv a^{(b\mod \phi(m))+\phi(m)}(\mod m)\)

得证

posted @ 2022-07-11 20:51  oyyea  阅读(35)  评论(0)    收藏  举报