每日一题 day31 打卡

Analysis

题目问的是满足 ax mod b = 1 的最小正整数 x。(a,b是正整数)

但是不能暴力枚举 x,会超时。

把问题转化一下。观察 ax mod b = 1,它的实质是 ax + by = 1:这里 y 是我们新引入的某个整数,并且似乎是个负数才对。这样表示是为了用扩展欧几里得算法。我们将要努力求出一组 x,y 来满足这个等式。稍微再等一下——

问题还需要转化。扩展欧几里得是用来求 ax + by = gcd(a,b) 中的未知数的,怎么牵扯到等于 1 呢?

原理是,方程 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 = ax + by,所以 m 必须是 gcd(a,b) 的倍数,

那么 m mod gcd(a,b) = 0

可得出在这道题中,方程 ax + by = 1 的有解的必要条件是 1 mod gcd(a,b) = 0,可怜的 gcd(a,b) 只能等于 1 了。这实际上就是 a,b 互质。

然后就可以直接套拓欧的板子了.

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define int long long
using namespace std;
inline int read()
{
int x=;
bool f=;
char c=getchar();
for(; !isdigit(c); c=getchar()) if(c=='-') f=;
for(; isdigit(c); c=getchar()) x=(x<<)+(x<<)+c-'';
if(f) return x;
return -x;
}
inline void write(int x)
{
if(x<){putchar('-');x=-x;}
if(x>)write(x/);
putchar(x%+'');
}
int a,b,x,y;
inline void exgcd(int a,int b)
{
if(b==)
{
x=;
y=;
return;
}
exgcd(b,a%b);
int re_x=x;
x=y;
y=re_x-a/b*y;
}
signed main()
{
a=read();b=read();
exgcd(a,b);
x=(x%b+b)%b;
write(x);
return ;
}

请各位大佬斧正(反正我不认识斧正是什么意思)

洛谷 P1082 同余方程 题解的更多相关文章

  1. 洛谷P1082 同余方程 题解

    题目链接:https://www.luogu.com.cn/problem/P1082 题目大意: 求关于 \(x\) 的同余方程 ax≡1(mod b) 的最小正整数解. 告诉你 \(a,b\) 求 ...

  2. 洛谷——P1082 同余方程

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

  3. 洛谷P1082 同余方程 [2012NOIP提高组D2T1] [2017年6月计划 数论06]

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

  4. [NOIP2012] 提高组 洛谷P1082 同余方程

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

  5. 洛谷P1082 同余方程

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

  6. 洛谷 P1082 同余方程

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

  7. 洛谷 P1082 同余方程 —— exgcd

    题目:https://www.luogu.org/problemnew/show/P1082 用 exgcd 即可. 代码如下: #include<iostream> #include&l ...

  8. 洛谷 P1082 同余方程(同余&&exgcd)

    嗯... 题目链接:https://www.luogu.org/problem/P1082 这道题很明显涉及到了同余和exgcd的问题,下面推导一下: 首先证明有解情况: ax + by = m有解的 ...

  9. 洛谷 P1082 同余方程(exgcd)

    题目传送门 解题思路: 因为推导过程过于复杂,懒得写,所以题解传送门 AC代码: #include<iostream> #include<cstdio> using names ...

随机推荐

  1. Python 运算符 各类运算符总结

    运算符详解2.1.算术运算符2.2.比较(关系)运算符2.3.赋值运算符2.4.逻辑运算符2.5.位运算符2.6.成员运算符2.7.身份运算符三.重要运算符说明3.1.join和符号”+“区别3.2. ...

  2. Spring AOP创建Throwdvice实例

    1.异常发生的时候,通知某个服务对象做处理 2.实现throwsAdvice接口 接口实现: public interface IHello { public void sayHello(String ...

  3. 安装Windows 2008 操作系统时加载ServeRAID-MR10系列阵列卡驱动

    安装Windows 2008 操作系统时加载ServeRAID-MR10系列阵列卡驱动 适用机型: 所有System x3200 M2; 所有System x3250 M2; 所有System x33 ...

  4. CentOS7.5 部署Ceph luminous

    环境 两台CentOS7.5,每台各两块硬盘部署OSD public network = 10.0.0.0/24 cluster network = 172.16.0.0/24 导入ceph的rpm ...

  5. Python学习日记(三) 学习使用dict

    数据按类型可划分为: 不可变数据类型(可哈希):元祖.string.int.bool 可变数据类型(不可哈希):dict.list 集合本身是可变数据类型,元素是不可变数据类型 字典中的key必须是不 ...

  6. PM2 监控 Spring Boot 项目运行

    更多 PM2 的用法介绍请参考: PM2简易使用手册 - 掘金 由于 PM2 通常都用于 node 应用, 所以 exec_mode 应写为 fork, 其中最重要的是 args, -jar 和 ja ...

  7. Jenkins 插件:Job Configuration History(记录job的历史更新记录)

    1. 添加插件   添加完成后,Jenkins,左下,多一个菜单栏 .可以查看,job的更新记录,见下图 .   如上,End再也不用担心,有同学乱改Job ,却不知道哪里被改的情况了. 注:1)这个 ...

  8. Windows 上搭建Apache FtpServer

    阅读目录 第一步:下载Apache FTPServer 第二步:解压Apache FTPServer 第三步:修改配置文件 第四步:启动FTPServer 第五步:访问FTP 第六步:FTPServe ...

  9. MYSQL中的乐观锁实现(MVCC)简析

    https://segmentfault.com/a/1190000009374567#articleHeader2 什么是MVCC MVCC即Multi-Version Concurrency Co ...

  10. git修改提交历史中的author信息

    当次提交 当次的提交显示指定提交者信息: git commit -m "Initial commit" --author="mn <mn@furzoom.com&g ...