数论学习笔记

正文


初等数论 - I(陈景润)


[P12 - 引理8]
设    (a;)(;b;)都是正整数,且(a>b,;;a=bq+r;(0<r<b))
其中   (q,r)都是正整数,则 ((a,b)=(b,r))

————————证明————————

设    ((a,b)=c)

则    (a=cm; , ;b=cn)

则    (r=a-bq=cm-cnq=c;(m-nq))

所以   (c;|;r)

所以   (c;|;(b,r))

设    ((b,r)=d>c)

由上知  ((a,b)=d>c)

而这与假设相矛盾,所以

((a,b);=;c;=;(b,r))

证毕

  • 总结:通过基本的算术变换或通过证矛盾都是得结论的方法

[P18 - 引理9]
(a,bin N^*)({a,b}=m)(n)(a;,;b) 的公倍数,则 (m;|;n)

————————证明————————

有  (1leqslant mleqslant n)

有  (a;|;m;,;b;|;m;,;a;|;n;,;b;|;n)

设  (m=aa';,;m=bb';,;n=aa'';,;n-bb'')

设  (n=mq+r;(0leqslant r<m))

由于 (n-mq=r)

得  (aa''-aa'q=r;,;bb''-bb'q=r)

得  (a(a''-a'q)=r;,;b(b''-b'q)=r)

所以 (a;|;r;,;b;|;r)

所以 (r)(a;,;b) 的公倍数

又因 ({a,b}=m)

所以 (r=0)

所以 (m;|;n)

证毕

  • 总结:通过证0值(特殊值)的方式证明

[P19 - 引理10]
(a,bin N^*)((a,b)=m;,;{a,b}=n),则 (ab=mn)

————————证明————————

有  (ab=np)

则  (dfrac{n}{b}=dfrac{a}{p};,;dfrac{n}{a}=dfrac{b}{p})

则  (p;|;a;,;p;|;b),为 (a;,;b) 的公因数

设  (a;,;b) 的另一个公因数(m')

则  (m'=dfrac{ab}{q'})

则  (q'=dfrac{ab}{m'})

因为 (dfrac{a}{m'},dfrac{b}{m'}in N^*)

所以 (q')(a,b) 的公倍数

所以 (dfrac{q'}{n}=dfrac{ab}{m'left(dfrac{ab}{p} ight)}=dfrac{p}{m'})

因为 (forall m'|p)

所以 (p=(a,b)=m)

所以 (ab=mn)

证毕

  • 总结:证其中一点,由性质得普遍结论

[P58 - 引理1]
如果 ((a,b)=1),则 (exists;x,yin Z) 使得 (ax+by=1)

————————证明————————

证明分三步

(i)

如果 (Z_1,Z_2)是能够写为形如 (ax+by) 的两个整数

因为 (Z_1=ax_1+by_1)

(Z_2=ax_2+by_2)

(k_1Z_1+k_2Z_2=ak_1 x_1+ak_2 x_2+bk_1 y_1+bk_2 y_2=(k_1x_1+k_2x_2)a+(k_1y_1+k_2y_2)b)

所以对于 (k_1,k_2in Z)(k_1Z_1+k_2Z_2)也可以写作形如 (ax+by) 的形式

EDITing...


数论的应用


【欧拉函数】

【题目描述】
给定一个数 (n),求 (varphi(n))

直接分类讨论推导:

  • 如果 (n) 是质数,那么显然 (varphi(n)=n-1)
  • 如果 (n=p^k),其中 (p) 为质数,那么显然,(n) 之中 (p) 的倍数肯定与 (n) 有公约数,所以我们减去它们就得到了 (varphi(n)) 的值,所以 (varphi(n)=n-n/p)
  • (n) 肯定可以写成 (prodlimits_{i=1}p_i^{k_i}) 的形式

我们筛完一个质因子之后统计,然后把这个因子除尽

inline int phi(int n){
	int cnt=n;
	for(int i=2;i*i<=n;i++){
		if(!(n%i)){
			cnt-=cnt/i;
			while(!(n%i)) n/=i;
		}
	}
	if(n>1) cnt-=cnt/n;
	return cnt;
}

【线性同余方程】

【题目描述】
求解关于 (x) 的线性同余方程 (axequiv1pmod{b}) 的最小正整数解

因为 (a,b) 已知,原式就相当于:

(ax+by=1)

exgcd求解即可

P1082 同余方程

#include<iostream>
using namespace std;
int a,b,x,y;
inline int exgcd(int a,int b){
	if(!b){x=1;return 0;}
	exgcd(b,a%b);
	int cp=x;
	x=y;
	y=cp-a/b*y;
}
int main(){
	cin>>a>>b;
	exgcd(a,b);
	cout<<(x+b)%b;
}

【线性同余方程组】

【题目描述】
求解关于 (x) 的线性同余方程组

(egin{cases} xequiv b_1pmod {a_1}\ xequiv b_2pmod {a_2}\ ;;;;vdots\ xequiv b_npmod {a_n} end{cases})

(A=prod^n_{i=1}a_i)

(ar{a}_i=A/a_i)

(t_i) 为线性同余方程 (ar{a}_it_iequiv 1pmod{a_i}) 的一个解

因为 (ar{a}_i)(a_i) 互质,但是 (forall j eq i)(ar{a}_i) 都是 (a_j) 的倍数,所以(mod a_j equiv 0)

又因为 (b_iar{a}_it_i pmod {a_i}equiv b_i)

所以原方程组的解为 (sum^{n}_{i=1}b_iar{a}_it_i)

P1495 【模板】中国剩余定理(CRT)/曹冲养猪

#include<iostream>
#define N 1000001
#define int long long
using namespace std;
int n,a[N],m[N],em[N],t[N],alm=1,x,y,ans;
inline void exgcd(int a,int b){
	if(!b){
		x=1;
		return;
	}
	exgcd(b,a%b);
	int cp=x;
	x=y;
	y=cp-(a/b)*y;
}
signed main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>m[i]>>a[i];
		alm*=m[i];
	}
	for(int i=1;i<=n;i++){
		x=0,y=0;
		em[i]=alm/m[i];
		exgcd(em[i],m[i]);
		t[i]=(x+m[i])%m[i];
		ans+=(a[i]*em[i]*t[i]);
	}
	cout<<ans%alm;
}

【EXCRT】

咕咕咕咕

原文地址:https://www.cnblogs.com/zythonc/p/13697613.html