正文
初等数论 - 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求解即可
#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)
#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】
咕咕咕咕