裴蜀定理
设 a,b 是不全为零的整数,对任意整数 x,y,满足 gcd(a, b) | (ax + by),且存在整数 x,y, 使得 ax + by = gcd(a,b).
练习题目:洛谷p4549 poj 1597 hdu 5512
题目可能出现的提示:
1、a,b知道
2、x,y不知
3、a * x + b * y = S
4、a,b搭配的结果 比如 hdu5512
线性丢番图方程
线段上的格点数量
问题描述:在二维平面上,给定两个格点p=(x1,y1)和p2-(x2,y2),问线段pp2上除了 p、pz外还有几个格点? 设x<x2。
解法一:
因为两个点,所以左上角一个点,右下角一个点(左下角,右上角同理),得出这条直线,从左上交的点x不断加1,计算他的y坐标,然后判断它的y是否是整数。如果是就加1.
解法二:线性丢番图方法
方程 ax+by=c 称为二元线性丢番图方程, 其中a、b、c是已知整数,、y是变量,问是否有整数解。ax+by=c实际上是二维x-y平面上的一条直线,这条直线上如果有整数坐标点,方程就有解;如果没有整数坐标点,就无解。如果存在一个解,就有无穷多个解。下面的定理给出了有解的判断条件和通解的形式。
定理6.8.1Ф
设a,6 是整数目 gcd(a,b)=d。如果d不能整除c,那么方程 ax十6y=c没有整数解,如果d能整除c,那么存在无穷多个整数解。另外,如果(zo,y。)是方程的一个特解,那么所有解(通解)可以表示为x=xo+(b/d)n,y=y。-(a/d)n,其中n为任意整数。
定理可以概括为ax+by-c有解的充分必要条件是d=gcd(a,b)能整除c。例如,方程18x+3y=7没有整数解,因为gcd(18,3)=3,3不能整除7;方程 25x+15y=70存在无穷个解,因为gcd(25,15)=5且5整除70,一个特解是 x。-4,yo--2,通解是x=4十3n,y--2-5n。
定理的前半部分,令a=da',b=db',有ax+by=d(a'z+b y)=c。如果x、y、a'b'都是整数,那么c必须是d=gcd(a,b)的倍数,才有整数解。
定理的后半部分给出了通解的形式:x值按b/d递增,y值按-a/d 递增。设(x。,y。)是一个格点(格点是指x、y坐标均为整数的点),移动到直线上另一个点(zo十Ax,y+Δy),有aΔx+6Δy=0。Δx 和 Δy 必须是整数,(xo+Δx,yo+Δy)才是另一个格点。Ax 最小是多少?因为 a/d 与b/d 互素,只有 Ax=b/d,△y =-a/d 时,△z 和 y 才是整数,并满足 a△x+b△y=0。
求二元方程组代码
ax + by = gcd(a, b) = d
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
// 这个是求特解的
ll extend_gcd(ll a, ll b, ll &x, ll &y) {
if (b == 0) { // 到达终点后进行返回
x = 1;
y = 0;
return a;
}
ll d = extend_gcd(b, a % b, y, x);
y -= a / b * x; // 使其x,y符合现在的方程条件
return d;
}
// 通解公式:
x = x0 + (b / d) * n;
y = y0 - (a / d) * n;
同余(描述整除关系)(m|a == m 能整除 a)
介绍
同余:设m是正整数,若a和b是整数,且m|(a一b),则称a和b模m 同余。也就是说,a除以m得到的余数,和b除以m的余数相同;或者说,a-b除以m,余数为0。把a和b模m 同余记为a≡b(mod m),m 称为同余的模。几个例子如下。
(1)因为7(18-4),所以18=4(mod7),18除以7的余数是4,4除以7的余数也是4。
(2)3=-6(mod9),3除以9的余数是3,-6除以9的余数也是3.(3)13和5模9不同余,因为13除以9的余数是4,5除以9的余数是5剩余系:一个模m完全剩余系是一个整数的集合,使每个整数恰与此集合中的一个元素模 m 同余。例如,整数0,1,…,m-1的集合是模m完全剩余系,称为模m最小非负剩余的集合。剩余系的概念在线性同余方程中有应用。
定理和性质
若a和b是整数,m为正整数,则a≡b(mod m)当且仅当a mod m=b mod m。这是同余的基本概念。
把同余式转换为等式。若a和b是整数,则a=b(modm)当且仅当存在整数k,使a-6+km。例如,19=-2(mod7),有19=-2+3X7。这个定理说明了同余方程和线性丢番图方程的关系。
设m是正整数,模m的同余满足以下基本性质
(1)自反性:若a是整数,则a=a(mod m)。(2)对称性:若a和b是整数,且a≡b(mod m),则b≡a(mod m)。
(3)传递性:若a、b、是整数,且a=b(modm)和b=c(mod m),则a≡c(mod m)。关于同余的加减乘除,若a、b、c和m是整数,m>0,且a=b(mod m),c≡d(mod m),则有以下性质
(1)加。简单表达:a十c=b+c(mod m);更一般的表达:a十c=b+d(mod m)。
(2)减。简单表达:a-c=b-c(mod m);更一般的表达:a-c=b-d(mod m).
(3)乘。简单表达:ac=bc(modm);更一般的表达:ac=bd(mod m)。(4)除。在同余的两边同时除以一个整数,不一定保持同余。参考本章关于模除法的说明(5)同余的幂。若a、b、k和m是整数,k>0,m>0,且a=b(mod m),则a =b(mod m)