Acwing-203-同余方程(扩展欧几里得)
2024-10-06 21:47:10
链接:
https://www.acwing.com/problem/content/205/
题意:
求关于x的同余方程 ax ≡ 1(mod b) 的最小正整数解。
思路:
首先:扩展欧几里得推导.
有ax+by = gcd(a, b) = gcd(b, a%b),
ax+by = bx+(a%b)y
ax+by = bx+(a-(a/b)b)y
ax+by = bx + ay-(a/b)by
ax+by = ay + b(x-a/by)
有x' = y, y' = x-a/by
递归求解
对于ax = 1 (mod b).有b | ax+1. 令 ax+1 = -yb.
有ax+by = 1.用扩展欧几里得可以求出一个解.
代码:
#include <bits/stdc++.h>
using namespace std;
int ExGcd(int a, int b, int &x, int &y)
{
if (b == 0)
{
x = 1, y = 0;
return a;
}
int d = ExGcd(b, a%b, x, y);
int tmp = y;
y = x-(a/b)*y;
x = tmp;
return d;
}
int main()
{
int a, b, x, y;
scanf("%d%d", &a, &b);
int gcd = ExGcd(a, b, x, y);
printf("%d\n", ((x%b)+b)%b);
return 0;
}
最新文章
- 源代码编译安装Python3.5.2
- [翻译]docker生态圈Mindmap
- hashCode之一--两个对象值相同,有相同的hash code
- [iOS基础控件 - 6.12.1] QQ菜单管理 UITabBarController 控制器管理
- Shell - 特殊变量
- 【转】Unable to execute dex: Java heap space 解决方案(如何为eclipse.int 添加内存)
- Yum中实现与apt-get install build-essential功能类似的命令
- boost::asio async_write也不能保证一次发完所有数据 二
- java学习笔记——Java多客户端与服务器通信
- sharepoint 创建个人网站
- Oracle EBS OM 主要API示例
- Mapreduce的序列化和流量统计程序开发
- win10系统搜索不到某些老式打印机
- eshint的配置
- [luogu4626][一道水题2]
- Handler实现线程间的通信1
- lxde 的安装和卸载以及注意事项,lubuntu
- python中类的概念
- 【转载】TCP数据包结构
- 多路复用IO与NIO