一.同余方程的判定

我们知道同余方程是形如

ax ≡ b (mod n)   的东西,用文字表达就是:

ax和b除以n的余数相同

那么,经过如下推理:(用=代替恒等于)

ax=b (mod n)

ax=b+n*x2 (转化为b加上n乘上某个数等于ax)

ax-n*x2=b(移项得)

a x1 + n x2 = b(转换)

ax + ny = b

但是为了看起来更顺眼,我们将除x,y的元素改变名称,得到:

ax + by = c

那么,判断是否有解:

举几个例子,不难得到:

c|gcd(a,b)时,ax + by = c有解。

然后可以举几个例子:

①2x + 3y = 1

这是一种特殊情况,解得其中一个解为 x0 = -1, y0 = 1

②4x + 6y = 2

化简为 2x + 3y = 1,解同上

③2x + 3y = 5

解得其中一个解为  x0  = -5, y0 = 5

发现与①的规律,也就是x0 * 5,y0 * 5

那么就可以将ax + by = c 简化为ax + by = 1 ,

换种形式表达就是:ax ≡ 1 (mod n)


二.同余方程的解法

这时,我们需要引入exgcd。

exgcd可以用来求

ax + by = gcd (a,b)

那么,如何证明呢?

先给出结果:

{

要解 ax + by  = 1

先解 bx + (a%b)y = 1

}

如何得到它?

在 bx + (a%b)y = 1 中展开a,得到

a = b·floor(a/b) + a%b

代入原方程,得

b·floor(a/b) + a%b)x + by = 1

与ax + by = 1等量代换,得

(a%b)*x + b(floor(a/b)·x+y) = 1

得到其中解:y0 = x,x0 = floor(a/b)·x+y

又由gcd(a,b) = gcd(b,a%b) 得到

exgcd(a,b,x,y) = exgcd(b,a%b,y,x), y -= (a/b) * x

代码:

#include <cstdio>
void exgcd(int a, int b, int &x, int &y)
{
if (b == ) x = , y = ;
else exgcd(b, a % b, y, x), y -= (a / b) * x;
}
int main()
{
int a = , b = , x, y;
exgcd(a, b, x, y);
printf("%d %d\n", x, y);
return ;
}

【OI】同余方程的更多相关文章

  1. 收集一些关于OI/ACM的奇怪的东西……

    一.代码: 1.求逆元(原理貌似就是拓展欧几里得,要求MOD是素数): int inv(int a) { if(a == 1) return 1; return ((MOD - MOD / a) * ...

  2. OI总结(垃圾排版就忽略了吧)

    学OI一年了,到现在联赛所需要的知识已经基本学完了.现在,有必要回过头来,总结总结自己一年来学到的知识以及得到的经验教训. 基础 语言基础 C++的语言基础啥的就略了吧. 算法复杂度分析 O:复杂度的 ...

  3. OI知识点|NOIP考点|省选考点|教程与学习笔记合集

    点亮技能树行动-- 本篇blog按照分类将网上写的OI知识点归纳了一下,然后会附上蒟蒻我的学习笔记或者是我认为写的不错的专题博客qwqwqwq(好吧,其实已经咕咕咕了...) 基础算法 贪心 枚举 分 ...

  4. OI中组合数的若干求法与CRT

    OI中组合数的若干求法与CRT 只是下决心整理一下子呢~ 说明:本篇文章采用\(\binom{a}{b}\)而不是\(C_{a}^b\),以\(p\)指代模数,\(fac_i\)指代\(i!\),\( ...

  5. OI数学汇总

    最前面:\(\LaTeX\)可能需要加载一会,请耐心等待o~ 前言 数学在\(\text{OI}\)中十分重要.其中大多都是数论. 什么是数论? \[ 研究整数的理论 --zzq \] 本文包含所有侧 ...

  6. ACM&OI 基础数论算法专题

    ACM&OI 基础数学算法专题 一.数论基础 质数及其判法 (已完结) 质数的两种筛法 (已完结) 算数基本定理与质因数分解 (已完结) 约数与整除 (已完结) 整除分块 (已完结) 最大公约 ...

  7. 啥也不是 -「OI 易犯错误整理」

    原帖出自 Nefelibata,不过他不想维护,所以就交给 STrAduts 了 awa.因为一些不可抗力,帖主转移至 XSC062.申请置顶! 前言 Nefelibata:因为笔者弱到无法形容,因此 ...

  8. 再见,OI

    你好,NOIP 2015年9月1日 正式成为了福建省莆田一中的一名高一成员 后来学校搞了选修 大家都很激动 因为自己的兴趣和特长能够得到发挥了(或者说能逃课或者看好多电影) 发现选修提供的选项中有好几 ...

  9. NOIP2012同余方程[exgcd]

    题目描述 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入输出格式 输入格式: 输入只有一行,包含两个正整数 a, b,用一个空格隔开 输出格式: 输出只有一行,包含一个正整 ...

随机推荐

  1. Django - 模版之继承

    模版继承: 当多个html有共同之处时,需要建立一个模版html(master.html) 1.在模版html中,写入公共的部分: 备注:在模版中,我们可以指定多个block ,其中,可以在标题,cs ...

  2. 【 jquery 】常用

    $("#input1").show('slide');    渐进显示$("#input1").hide('slide');     渐进隐藏 siblings ...

  3. iview“官方“实现的右键菜单

    博客开篇,没想到第一篇博文竟然是前端的,虽略显尴尬,但正能量溢出,你我可能遇到同样问题,在这里分享下个人方案,希望对你有用. 官方目前不提供右键菜单,这里借助Dropdown(下拉菜单)来实现,故为“ ...

  4. 【搜索、bfs】Find The Multiple

    Problem   Given a positive integer n, write a program to find out a nonzero multiple m of n whose de ...

  5. CCF201703-2 学生排队 java(100分)

    试题编号: 201703-2 试题名称: 学生排队 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 体育老师小明要将自己班上的学生按顺序排队.他首先让学生按学号从小到大的顺序排 ...

  6. python爬虫23 | 手机,这次要让你上来自己动了。这就是 Appium+Python 的牛x之处

    你有没有想过让你的手机帮你自动完成某些事情 比如自动帮你抢红包 有些软件不是有签到活动么 这些傻瓜式的操作 能不能让手机自动签到呢? 自动帮你叫外卖 自动帮你打电话 等等 还有 对于手机上的一些比较难 ...

  7. 【19】AngularJS 应用

    AngularJS 应用 现在是时候创建一个真正的 AngularJS 单页 Web 应用(single page web application,SPA)了. AngularJS 应用实例 现在可以 ...

  8. 使用lombok提高编码效率-----不用写get set

    使用lombok提高编码效率-----不用写get    set https://blog.csdn.net/v2sking/article/details/73431364

  9. h5dnd sortable mutil groups

    h5dnd sortable mutil groups https://codepen.io/webgeeker/pen/JmPXaN https://codepen.io/webgeeker/pen ...

  10. [luoguP2904] [USACO08MAR]跨河River Crossing(DP)

    传送门 f[i] 表示送前 i 头牛过去再回来的最短时间 f[i] = min(f[i], f[j] + sum[i - j] + m) (0 <= j < i) ——代码 #includ ...