ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

简单数论(扩展欧几里得,同余)(未完成)

2019-08-07 11:52:08  阅读:319  来源: 互联网

标签:方程 数论 欧几里得 int therefore ax over 同余


扩展欧几里得

现在有一个不定方程\(ax+by=c\),我们需要求出这个方程的一组特解,且\(x,y\)都为整数。根据悲蜀定理,要得到整数解,必须满足\(\gcd(a,b)|c\),(接下来的所有\(gcd(a,b)\)都会简写为\((a,b)\))

首先我们可以先求出方程\(ax'+by'=(a,b)\)的特解。
\[ \begin{align} \because& c={c\over (a,b)}(a,b)\\ \therefore& a{c\over (a,b)}x'+b{c\over (a,b)}y'={c\over (a,b)}(a,b)\\ \Rightarrow& a{c\over (a,b)}x'+b{c\over (a,b)}y'=c\\ \therefore& x={c\over (a,b)}x', y=b{c\over (a,b)}y' \end{align} \]
所以我们就可以得到原方程的一组特解了。那么现在的问题是:如何求出第二个方程的特解呢。

首先,如果\(b=0\),那么显然可以得到\(a=1, b=0\)。

接着考虑一般情况:
\[ \begin{align} \because& (a,b)=(b, a\% b)\\ \therefore& ax+by=bx'+(a\% b)y'\\ \Rightarrow& ax+by=bx'+(a-\lfloor{a\over b}\rfloor b)y'\\ \Rightarrow& ax+by=ay'+b(x'-\lfloor{a\over b}\rfloor y')\\ \therefore&x=y', y=x'-\lfloor{a\over b}\rfloor y' \end{align} \]

void exgcd(int a, int b, int& x, int& y) {
    if (!b) {
        a = 1, b = 0;
        return ;
    }
    exgcd(b, a % b, x, y);
    int t = x;
    x = y, y = t-(a / b) y;
}

同余方程

现在有一个同余方程,形如\(ax\equiv b\pmod p\),现在需要求出\(x\)。

我们知道同余方程其实可以转化为一个不定方程:\(ax+bp=b\)而这个方程显然可以使用扩展欧几里得进行求解,而有解的条件显然是\((a,p)|b\)

\(\Rightarrow\)同余方程(模板)

逆元

众所周知,模运算之中是不能使用除法的,但是我们知道,除以一个数\(=\)乘上这个数的倒数。那么取模中是否存在类似倒数的东西呢?我们需要知道,假设这个数\(x\)使我们需要的,那它显然要满足\(ax\equiv 1\pmod m\),也就是说\(x\)是\(a\)模\(m\)下的倒数,这个东西也叫作逆元。

这个逆元的求解方法有两种,一种是使用同余方程,一种是线性筛,现在我们就来讲一下线性筛的证明的代码。

标签:方程,数论,欧几里得,int,therefore,ax,over,同余
来源: https://www.cnblogs.com/juruohjr/p/11314412.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有