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

数论基础

费马小定理

p为质数,gcd(a,p)=1,则ap11(modp)

另一形式:对于任意整数a,都有apa(modp)

证明

构造一个序列A={0,1,2,3,,p1},已知Ap的完全剩余系

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

解释:反证法,假设序列B不是p的完全剩余系,即存在AiaAja(modp)(Ai>Aj)

(AiAj)a0(modp)p|(AiAj)a

gcd(a,p)=1,AiAj[1,p1]

故不存在p|(AiAj)a

综上,每个Aia(modp)都对应一个Aj(modp)p个元素组成了完全剩余系

显然0·a对应0

f=(p1)!,则ap1ff(modp)ap11(modp)

得证

关于另一形式:

对于不是p的倍数a,可由ap11(modp),得到apa(modp)

对于是p的倍数aamodp=0,apmodp=0apa(modp)

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

素数

素数计数函数:π(x)limx=xln(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±1的形式

素性判断

//时间复杂度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;
}

解释:

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

比起费马测试,将an11(modn)n1开方进行了优化

优化依据:对于素数p(p2),如果a21(modn),则a=1或者a=n1(二次剩余)

欧拉函数

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

基础公式

  • ϕ(1)=1
  • 如果n为质数,则ϕ(n)=n1
  • 如果n为某质数的次方,则ϕ(pk)=pkpk1
  • 对于任意nϕ(n)=ni=1s(11pi)sn的质因子个数

关于最后一项证明:

n=pmp为数

1n可以被分成p份,[1,m][m+1,2m][(p1)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,故ϕ(n)=pϕ(m)

pm时,gcd(b,p)不一定为1,则ϕ(n)=pϕ(m){mp}

已知与p不互质的数有,p,2p,3pmp

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

ϕ(n)=ϕ(m)(p1)

递推得ϕ(n)=i=1s(pikpik1)=ni=1s(11pi)

函数性质

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

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

  • n=d|nϕ(d)

证明:

n=i=1nf(i)f(i)表示gcd(k,n)=i(k[1,n])k的个数

显然i只会是n的因数,故n=d|nf(d)

gcd(k,n)=dgcd(kd,nd)=1

f(d)=ϕ(nd)

根据约数性质:当d遍历n的全体约数时,nd也遍历n的全体约数

n=d|nϕ(nd)=d|nϕ(d)

  • gcd(a,b)=d时,ϕ(ab)=ϕ(a)ϕ(b)dϕ(d)

证明:

d=pikipi+1ki+1pjkj

a=pimipi+1mi+1pjmjA

b=pinipi+1ni+1pjnjB

【注:gcd(a,b)=dki=min(mi,ni)

ab=pimipinipi+1mi+1pi+1ni+1pjmjpjnjAB

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

ϕ(d)=pikipi+1ki+1pjkj(1pi1)(1pi+11)(1pj1)

ϕ(a)=pimipi+1mi+1pjmj(1pi1)(1pi+11)(1pj1)ϕ(A)

ϕ(b)=pinipi+1ni+1pjnj(1pi1)(1pi+11)(1pj1)ϕ(B)

ϕ(ab)=pimipinipi+1mi+1pi+1ni+1pjmjpjnj(1pi1)(1pi+11)(1pj1)ϕ(A)ϕ(B)

(1pi1)(1pi+11)(1pj1)=ϕ(d)d

ϕ(ab)=ϕ(a)ϕ(b)dϕ(d)

  • 在int范围内,ϕ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ϕ(m)1(modm)

简单证明:

r1,r2rϕ(m)为模m的既约剩余系(即余数与m互质的一批余数互不相同的数的集合)

gcd(ri,m)=1,gcd(a,m)=1gcd(ari,m)=1

ar1,ar2arϕ(m)也为模m的既约剩余系

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

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

扩展欧拉定理

ab{(1)abmodϕ(m),gcd(a,m)=1(2)ab,gcd(a,m)1,b<ϕ(m)(modm)(3)a(bmodϕ(m))+ϕ(m),gcd(a,m)1,bϕ(m)

第三项证明:

m=sprgcd(s,p)=1

pϕ(s)1(mods)

ϕ(m)=ϕ(s)ϕ(pr)ϕ(s)|ϕ(m)

pϕ(m)1(mods)

根据同余性质 pϕ(m)prpr(modspr)pϕ(m)+rpr(modm)

pcpcr+rpϕ(m)+c(modm),cr

显然rϕ(m) (因为ϕ(m)=i=1s(piripiri1)r线性增长时,prpr1级数增长)

故当cϕ(m)时,pcpϕ(m)+c(modm)也成立

再由于pϕ(m)pϕ(m)+rrprr1(modm)

所以pcpcmodϕ(m)+ϕ(m)(modm)

质数幂次类同,(pk)c(pk)cmodϕ(m)+ϕ(m)(modm)

根据算法基本定理a=piki,故aba(bmodϕ(m))+ϕ(m)(modm)

得证

posted @   oyyea  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
点击右上角即可分享
微信分享提示