洛谷 P1082 同余方程(同余&&exgcd)
嗯...
题目链接:https://www.luogu.org/problem/P1082
这道题很明显涉及到了同余和exgcd的问题,下面推导一下:
首先证明有解情况:
ax + by = m有解的必要条件是 m mod gcd(a, b) = 0
a为gcd(a, b)的倍数,b为gcd(a, b)的倍数,x、y为整数,
所以ax + by是gcd(a, b)的倍数,所以m是gcd(a, b)的倍数
然后证明a、b互质(下面会用到):
本题中1 mod gcd(a, b) = 0,所以gcd(a, b) = 1,所以a、b互质
同余:
a≡b(mod n) --> 含义:a和b关于模n同余,即 a mod n = b mod n。
所以不难推出,a≡b的充要条件是a-b是n的整数倍(a > b)。
因为a-b是n的整数倍,所以a-b = ny(y为倍数)
所以,根据同余,我们可以把本题中的同余式转化为(注:这里的a.b与上文不同):
ax≡1(modb) --> ax % b = 1 % b --> ax - 1 = by --> ax - by = 1
下一步,便进行exgcd(关于exgcd的证明见:https://www.luogu.org/problemnew/solution/P1082),分别求出ax - by = 1中x和y的值。
最后进行答案处理:
因为答案要求是x的最小正整数,所以我们进行一个答案处理:x = (x % b + b) % b
证明其正确性:
设新得到的x为xn,x = kb + q(q < b)则:
x % b = q ,把x % b = q带入 xn = (x % b + b) % b,得
xn = (x % b + b) % b = (q + b) % b = (q % b + b % b) % b = q % b = q
把xn = q带入x = kb + q,得,x = kb + xn, 所以xn = x - kb,然后再根据下面的推导得知它是正确的...
证明:
x批量地减去或加上 b,能保证 ax + by = ax + by = 1:
ax + by = 1
ax + by + k*ba - k*ba = 1
a (x + kb) + (y - ka) b = 1
1.显然这并不会把方程中任何整数变成非整数。
2.“加上或减去 b”不会使 x 错过任何解。可以这么理解:
已经求出一组整数 x,y 使得 ax+by =1 ,也就是(1 - ax) / b = y。y 是整数,可见目前 1−ax 是 b 的倍数。现在想改变 x并使得方程仍然成立。
已知 a,b 互质,假若x的变化量Δx不是b的倍数,则1−ax 的变化量−a*Δx也不是 bb 的倍数,这会使得1-ax不再是b的倍数,则y不是整数了。
仅当x的变化量是b的倍数时,1−ax能保持自己是b的倍数,此时就出现新的解了。
AC代码:
#include<cstdio>
#include<iostream> using namespace std;
//ax % b == 1 % b --> ax - 1 = y * b --> ax - yb == 1 long long d, x, y; inline void exgcd(long long a, long long b, long long &d, long long &x, long long &y){
if(!b) {d = a; x = ; y = ;}
else{ exgcd(b, a % b, d, y, x); y -= x * (a / b);}
}
int main(){
long long a,b;
scanf("%lld%lld", &a, &b);
exgcd(a, b, d, x, y);
x = (x % b + b) % b;
printf("%lld", x);
return ;
}
AC代码
洛谷 P1082 同余方程(同余&&exgcd)的更多相关文章
- 洛谷——P1082 同余方程
P1082 同余方程 题目描述 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入输出格式 输入格式: 输入只有一行,包含两个正整数 a, b,用一个空格隔开. 输出格式: 输 ...
- 洛谷P1082 同余方程 [2012NOIP提高组D2T1] [2017年6月计划 数论06]
P1082 同余方程 题目描述 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入输出格式 输入格式: 输入只有一行,包含两个正整数 a, b,用一个空格隔开. 输出格式: 输 ...
- 洛谷 P1082 同余方程 —— exgcd
题目:https://www.luogu.org/problemnew/show/P1082 用 exgcd 即可. 代码如下: #include<iostream> #include&l ...
- 洛谷 P1082 同余方程(exgcd)
题目传送门 解题思路: 因为推导过程过于复杂,懒得写,所以题解传送门 AC代码: #include<iostream> #include<cstdio> using names ...
- [NOIP2012] 提高组 洛谷P1082 同余方程
题目描述 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入输出格式 输入格式: 输入只有一行,包含两个正整数 a, b,用一个空格隔开. 输出格式: 输出只有一行,包含一个正 ...
- 洛谷P1082 同余方程
题目描述 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入输出格式 输入格式: 输入只有一行,包含两个正整数 a, b,用一个空格隔开. 输出格式: 输出只有一行,包含一个正 ...
- 洛谷 P1082 同余方程
题目描述 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入输出格式 输入格式: 输入只有一行,包含两个正整数 a, b,用一个空格隔开. 输出格式: 输出只有一行,包含一个正 ...
- 洛谷P1082 同余方程 题解
题目链接:https://www.luogu.com.cn/problem/P1082 题目大意: 求关于 \(x\) 的同余方程 ax≡1(mod b) 的最小正整数解. 告诉你 \(a,b\) 求 ...
- 洛谷 P1082 同余方程 题解
每日一题 day31 打卡 Analysis 题目问的是满足 ax mod b = 1 的最小正整数 x.(a,b是正整数) 但是不能暴力枚举 x,会超时. 把问题转化一下.观察 ax mod b = ...
随机推荐
- codeforces A. Zoning Restrictions Again
A. Zoning Restrictions Again ou are planning to build housing on a street. There are n spots availab ...
- JS高级---把局部变量变成全局变量
如何把局部变量变成全局变量? 把局部变量给window就可以了 函数的自调用---自调用函数 一次性的函数--声明的同时, 直接调用了 (function () { console.log(& ...
- STM32程序烧录总结
1.程序烧录方式 1)ST-LINK下载 2)SWD下载 SWD对应的引脚为:GND.RST.SWDIO.SWDCLK SWD与Jlink的比较 3)串口下载 串口下载不能直接在MDK点击Downlo ...
- python字典里面列表排序
#coding=utf8 #获取到的数据库ip,和负载数据,需要按照负载情况排序 a={u'1.8.1.14': [379, 368, 361, 358, 1363], u'9.2.4.3': [42 ...
- python的MySQLdb库基本使用介绍
MySQLdb库 import MySQLdb 简介 提供mysql的基本操作(包括建表,读取表数据,插入数据到表) 数据库操作基本步骤 #!/usr/bin/python # -*- coding: ...
- Ubuntu安装MySQL密码初始化问题
在Ubuntu上使用sudo apt-get install mysql-server mysql-common 命令安装MySQL以后,安装过程中没有提示输入密码.然后使用mysql -u root ...
- 「JSOI2015」圈地
「JSOI2015」圈地 传送门 显然是最小割. 首先对于所有房子,权值 \(> 0\) 的连边 \(s \to i\) ,权值 \(< 0\) 的连边 \(i \to t\) ,然后对于 ...
- Windows系统重装记录
材料: u盘(需4g以上) windows官方镜像 附:windows个版本比较 步骤: u盘格式化(为了装启动盘系统需要清空数),备份系统盘所需要的的数据 下载适合自己的官方镜像,可从该网站下载(官 ...
- Coursera-吴恩达机器学习课程笔记-Week1
参考资料: 吴恩达教授机器学习课程 机器学习课程中文笔记 Week 1 一. 引言 机器学习模型可分为监督学习Superviese learning(每个数据集给出了正确的值)和无监督学习Unsupe ...
- css 把图片变成灰色
3.14号刚下班,噩耗传来,伟大的物理学家斯蒂芬·威廉·霍金去世了. 同事正好叫我吃饭,几分钟内去看了一眼百度百科,一看也都变黑白了,可是查看图片还是彩色的,也是哪有这么快的时间来p图呢,回来搜了一下 ...