AcWing 203. 同余方程
. 同余方程
一、题目描述
求关于 的同余方程 的 最小正整数解。
输入格式
输入只有一行,包含两个正整数 ,用一个空格隔开。
输出格式
输出只有一行,包含一个正整数 ,表示最小正整数解。
输入数据保证一定有解。
数据范围
输入样例
3 10
输出样例
7
样例解读:,此时是最小正整数解
二、解题思路
线性同余方程模板题
因为题目说一定有解。根据裴蜀定理,线性同余方程 有解,当且仅当 。
回到本题,就是 ,对照通用形式,上面的方程对位改写为
解释:
通用式
本题式
使用扩欧解题两步走
- 用扩展欧几里得算法求出方程的一组解
- 将 ,转移到 区间内即可
注意
- 开 ;
- 中的取模较为特殊,要用 代码进行取模
三、实现代码
#include <cstdio>
using namespace std;
typedef long long LL;
//快读
char buf[1 << 23], *p1 = buf, *p2 = buf;
#define getchar() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 21, stdin), p1 == p2) ? EOF : *p1++)
int read() {
int x = 0, f = 1;
char ch = getchar();
while (ch < '0' || ch > '9') {
if (ch == '-') f = -1;
ch = getchar();
}
while (ch >= '0' && ch <= '9') {
x = (x << 3) + (x << 1) + (ch ^ 48);
ch = getchar();
}
return x * f;
}
int exgcd(int a, int b, int &x, int &y) {
if (!b) {
x = 1, y = 0;
return a;
}
int d = exgcd(b, a % b, y, x);
y -= a / b * x;
return d;
}
int main() {
int a = read(), b = read();
int x, y;
exgcd(a, b, x, y);
printf("%d\n", ((LL)x % b + b) % b);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2019-05-24 Rabbitmq异常排查
2018-05-24 2、Centos6 安装tomcat8.5.31
2018-05-24 1 、在Linux(centos6.8)系统下的JDK安装与配置