同余方程,不定方程总结

听说这是数论中比较重要的部分了,一点点的总结吧。。

一.线性同余方程与不定方程:

单个一元线性方程

求解方法:扩展欧几里得 exgcd

模板:

long long exgcd(long long a,long long b,long long &x,long long &y)
{
    if(!b)
    {
        x=1;
        y=0;
        return a;
    }
    __int64 tt=exgcd(b,a%b,x,y);
    __int64 t;
    t=x;
    x=y;
    y=(t-a/b*y);
    return tt;
}

原理:对于整数 a,b。存在 x,y使 x*a+y*b=gcd(a,b);

当b=0时,有gcd(a,b)=a,显然此时 x=1,y=0.

exgcd算法可以在朴素 gcd 中的一步一步的递归中迭代更新 x,y的值,最终求出 x*a+y*b=gcd(a,b)的一组解。

利用exgcd求不定方程 x*a+y*b=c 解的步骤:

(1).用 exgcd求出 d=gcd(a,b) 和 x*a+y*b=gcd(a,b) 一组解 x0,y0 ;

(2).判断  c%d==0,则有解,否则无解

(3).令 x=x0*c/d,y=y0*c/d;则得到此方程的一组解 x,y

(4).若需要求最大最小解,再线性变换 x,y查找。

例:  x*a+y*b=c  ,y每增加1,x减小b/a,化为互质整数:y增加a/d,x减小b/d,可见x的周期是b/d

所以要找最小的x 只需要 x=(x%(b/d)+b/d)%(b/d)即可。

求解同余方程 a*x==b mod m,可转化为求 x*a+y*m=b,套用上面的步骤求解即可

例题 poj1061  poj2115

一元一次同余方程组 (x=b[i](mod a[i]) ):

朴素解法:

思想:方程的合并,转化为单个同余方程

参考资料 http://www.cnblogs.com/heweiyou1993/p/3301894.html

模板:

例题:

中国剩余定理:

多元线性同余方程组:

二.高次同余方程组

a^x ==b (mod c)型

三.特殊的不定方程

费马大定理

毕达哥拉斯三元组

佩尔方程

时间: 2024-10-12 13:09:58

同余方程,不定方程总结的相关文章

【BZOJ】2186 沙拉公主的困惑

一道非常有价值的题. [解析1]欧几里德算法求乘法逆元,前缀和 [Analysis]O(T n log n). [Sum] ①int运算,如果会超出界,第一个数前要加上(LL)即类型转换. ②gcd不变的欧几里德定理:可以是加,也可以是减. [Code] /************************************************************** Problem: 2186 User: y20070316 Language: C++ Result: Accept

扩展欧几里德算法—求解不定方程,线性同余方程

#include<stdio.h> int extended_gcd(int a,int b,int &x,int &y) { int r,t; if(!b) { x = 1; y = 0; return a; } r = extended_gcd(b,a%b,x,y); t = x; x = y; y = t-a/b*y; return r; } int main() { int a,b,x,y,z; scanf("%d%d",&a,&b)

【lydsy1407】拓展欧几里得求解不定方程+同余方程

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1407 题意: 有n个野人,野人各自住在第c[i]个山洞中(山洞成环状),每年向前走p[i]个山洞,到这个山洞住下来. 每个野人的寿命为l[i],问至少需要多少个山洞,才能让野人在有生之年永远不住在同一个山洞. 题解: 原本不会拓展欧几里得和同余方程,在这里尽量详细地写一下由这题学到的东西. 我原本是从网上看各类题解然后打的,因为不理解和某些题解上的错误,导致调了很久. 下面写我的题解,如

线性不定方程与线性同余方程

线性不定方程解法 扩展欧几里得算法: 考虑求这个不定方程的一个解: ax+by=c 可以证明该不定方程有解的充分必要条件是(a,b) | c.证明:(a,b) | a且(a,b) | b,因为c=ax+by,故(a,b) | c. 于是可以把等式两边同时除上一个(a,b)转化为a,b互质的情况. 考虑a,b互质的情况.我们现在要解不定方程:                                         ax+by=c先假设我们可以解出:                     

数论之拓展欧几里得求解不定方程和同余方程组(一)

今天接到scy的压缩包,开始做数论专题.那今天就总结一下拓展欧几里得求解不定方程和同余方程组. 首先我们复习一下欧几里得算法: 1 int gcd(int a,int b){ 2 if(b==0) return a; 3 return gcd(b,a%b);4 } 拓展欧几里得算法: 推导过程: 给出A和B,求它们的最大公约数,并且求出x和y,满足Ax+By=gcd(A,B). 当A=0时,x=0,y=1; 当A>0时, 因为exgcd(A,B,x,y)表示Ax+By=gcd(A,B) 而且ex

【NOIP】提高组2012 同余方程

[算法]扩展欧几里德算法 [题解]学完扩欧就可以随便水了... 转化为不定方程ax-by=1. 因为1且题目保证有解,所以方程有唯一解. 紫书曰:同余方程的一个解其实指的是一个同余等价类. 所以满足x≡x'(mod b)的其他x'也是方程的解. 题目求最小正整数解,因此ans=x%b. #include<cstdio> #define ll long long void gcd(ll a,ll b,ll& g,ll& x,ll& y) { if(!b){g=a;x=1,

【初等数论】 04 - 同余方程

1. 同余方程 剩余类可以看做是一个新的数系,它对加减乘运算是封闭的,所以同余方程对多项式是有意义的.本节我们就来讨论一元多项式方程(1)的解,当然它的解是一个剩余类集合,最多有\(m\)个解. \[f(x)=\sum_{k=0}^{n}{a_kx^k}=a^nx^n+\cdots+a_1x+a_0\equiv 0\pmod{m}\tag{1}\] 在正式解一个同余方程前,可以先进行一些简单的变形,最简单的就是将系数取模.对于两个多项式\(f(x),g(x)\),如果它们的系数是模\(m\)同余

【初等数论】 06 - 不定方程

前面介绍的只是初等数论的基本概念,它有很多的应用场景,如果有机会以后我们还会看到,这里我只想单独举出不定方程的例子.不定方程又叫丢潘图方程,它们以整数(或有理数)为变量和参数,而且有两个以上的未知数,多以多项式形式出现.不定方程既是数论的应用,也是数论理论形成的来源,对不定方程的思考会动用起你全部的数论知识.这里仅列举一些简单的问题,作为知识巩固也好,作为娱乐欣赏也行. 1. 一次不定方程 最简单的不定方程就是一次方程(1),它表现为一个多元线性方程.如果你还记得前面最大公约数的线性组合定义,就

数论 - n元线性同余方程的解法

note:n元线性同余方程因其编程的特殊性,一般在acm中用的很少,这里只是出于兴趣学了一下 n元线性同余方程的概念: 形如:(a1*x1+a2*x2+....+an*xn)%m=b%m           ..................(1) 当然也有很多变形,例如:a1*x1+a2*x2+...+an*xn+m*x(n+1)=b.这两个都是等价的. 判断是否有解: 解线性同余方程,我们首先要来判断方程是否有解,方程有解的充要条件是:d%b==0.其中d=gcd(a1,a2,...an)