★勿忘昨日的苦难辉煌,★
☆无愧今朝
|

_画生

园龄:2年7个月粉丝:0关注:1

2022-08-16 15:30阅读: 129评论: 0推荐: 0

初等数论入门笔记

数论课本

常见记号:

gcd(a,b) a与b的最大公约(因)数;
lcm(a,b) a与b的最小公倍数;

常见性质:

lcm(a,b)=ab/gcd(a,b)

同余的性质

求gcd

1. 欧几里得算法

点击查看代码
inline int gcd( int a , int b ) {
return b == 0 ? a : gcd( b , a % b );
}

2. stein算法(不需除法,适合高精)

线性同余方程

部分证明出处

一元线性同余方程(扩展欧几里得算法;exgcd)

前置知识:

同余的性质、欧几里得算法

求解:

解任意同余方程 axc (mod  m),即求axc0 ( mod  m)的解。

此时m|(axc),也就是说此时存在yZ,m·y=axc
因此解同余方程axc (mod  m)和解形如ax+by=c的不定方程(abcxy 为整数)等价。

>问题转化为解形如ax+by=c的不定方程(abcxy 为整数)(又叫做丢番图方程)

裴蜀定理:

  • 表述:不定方程 ax+by=cabcxy 为整数)有解,当且仅当 c  mod  gcd(a,b)=0

  • 简易证明: agcd(a,b)的倍数, b也为gcd(a,b)的倍数
    ax+by一定为gcd(a,b)的倍数(xy为整数)
    又∵ax+by=c有解
    cgcd(a,b)的倍数(必要性略)

  • 推论:a,b互质的充分必要条件是存在整数x,y使ax+by=1 ( gcd(a,b)=1 )

扩展欧几里得算法(求解不定方程 ax+by=cabcxy 为整数))

Q: 为什么叫“扩展欧几里得算法”呢?
A: 因为这个算法在求出gcd(a,b)的同时,可以求出一组整数x,y,使得不定方程 ax+by=c(c为整数)成立。

由裴蜀定理可得:

aX+bY=c有解,则ax+by=gcd(a,b)有解,
c=k·gcd(a,b),有:X=kx,Y=ky;

因而先考虑求解ax+by=gcd(a,b)
又由裴蜀定理知,此时存在x,yax+by=gcd(a,b)bx+(abab)y=gcd(b,abab)

由欧几里得算法知gcd(a,b)=gcd(b,abab)
所以可联立上方两个式子:
ax+by=bx+(abab)y
整理,得:
a(xy)+b(y(xaby))=0
要使上述式子恒成立,则x=y,y=xaby;①

可以递归求解x,y,因此求解规模相较原方程大幅减小。

递归边界和gcd求解是一致的,当b=0gcd(a,b)=gcd(a,0),a·xn=gcd(a,0)=a,
解,得:当b=0xn=1,yn=0,递归中回代(注意临时存储x)①即可求出原方程解。

点击查看代码
inline ll exgcd( ll a , ll b ) {
if( b == 0 ) {
x = 1;
y = 0;
return a;//递归边界同gcd一致,此时ax = gcd(a,0) = a , x = 1
}
else {
exgcd( b , a % b );
ll t = x;//储存x'
x = y;
y = t - ( a / b ) * y;
}
}

注意事项:大部分题目要求解出非负解,所以exgcd后要对x进行处理

推广应用(exgcd求乘法逆元)

逆元是什么,为什么要求逆元呢?
有些时候,在计数题中,我们要对有理数取模(取余)

例如计算ba  mod  c的值(a,b,c均为整数)时,

由分式的性质易得:

ba  mod  c=a1·ba1·a  mod  c=a1·b  mod  c

这也就是说,如果a1为整数,那么我们就可以把分数取余问题转化为整数取余。

a1怎样才能为整数呢?问题的关键是在模意义下考虑问题。

--未完待续

线性同余方程组

筛法

1. 埃氏筛

2. 线性筛求素数

3. 线性筛求欧拉函数(求积性函数)

常见数论定理

1. 费马小定理

2. 欧拉定理

3. 中国剩余定理

本文作者:huasheng

本文链接:https://www.cnblogs.com/-hua-sheng-/p/16591748.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   _画生  阅读(129)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起