每日一题 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. [清晰] kubernets权威指南第2版

    ------ 郑重声明 --------- 资源来自网络,纯粹共享交流, 如果喜欢,请您务必支持正版!! --------------------------------------------- 下 ...

  2. 微软.NET CORE 3.0 预览版 7 发布:大幅减少 SDK 空间大小

    据悉,这个预览版是 .Net Core 3 中重要的版本,可以视为原计划在 7 月发布的 RC 版本 (引自微软 .NET Core 首席 Program Manager Richard 先生原话), ...

  3. Java内存模型——方法区

    方法区(Method Area) ①      对每个加载的类型,JVM必须在方法区中存储以下类信息: 1)        这个类型的完整有效名(类型信息) 类型名称在Java类文件和JVM中都以完整 ...

  4. MY SQL 两种安装方式

    MySQL基础知识-安装MySQL   前导: 昨天去参加了一个面试,公司不太大,是一家日资企业,在国内有几家分公司,面试官问到了MySQL的基本操作和性能优化,说了一大堆,倒是比较轻松的过了,但是面 ...

  5. azkban从编译开始安装

    从git上下载最新的azkban稳定版代码 git clone https://github.com/azkaban/azkaban.git -b 3.74.3 这里还有个问题,如何把这个代码放到自己 ...

  6. Keepalived简单理解

    Keepalived Keepalived是一个基于VRRP协议来实现的LVS服务高可用方案,可以利用其来避免单点故障.一个LVS服务会有2台服务器运行Keepalived,一台为主服务器(MASTE ...

  7. css实现 textarea 高度自适应

    此textarea非彼textarea ,有经验的老司机们应该知道html标签contenteditable这个属性. 利用此属性使当前的标签成为可以输入的状态,等同于输入框. 演示地址:https: ...

  8. 全局启动函数start_kernel函数注解

    asmlinkage void __init start_kernel(void) { char * command_line; extern struct kernel_param __start_ ...

  9. c# MatchCollection类

  10. atoi()和itoa()函数详解以及C语言实现

    atoi()函数 atoi()原型:  int atoi(const char *str ); 函数功能:把字符串转换成整型数. 参数str:要进行转换的字符串 返回值:每个函数返回 int 值,此值 ...