求关于x的同余方程 ax ≡ 1(mod b) 的最小正整数解。

输入格式
输入只有一行,包含两个正整数a,b,用一个空格隔开。

输出格式
输出只有一行,包含一个正整数x,表示最小正整数解。

输入数据保证一定有解。

数据范围
2≤a,b≤2∗109
输入样例:
3 10
输出样例:
7

题意:要求满足题给的式子的最小正整数x

思路:线性同余方程的经典问题

ax ≡ m(mod b)  (原型)

ax ≡ 1(mod b)   ->    ax - by = 1(因为%b就相当于ax减掉若干个b)

说明只有gcd(a,b)=1时才有解

这里我们就可以化成扩展欧几里得来求解

扩欧:   ax+by=gcd(a,b)  ,肯定有x,y能满足这个条件

证明:

1.gcd(a,b)=gcd(b,a%b)

2. 欧几里得算法算到最后,当b=0时,a*1+0*0=gcd(a,0)

3. bx+a%by = gcd(b,a%b)   ->    bx +  (a-a/b*b)y  = gcd(b,a%b)   ->   ay +  b(x-a/b*by) = gcd(b,a%b)  ->  ax' + by' = gcd(a,b)

所以由2我们可知最简形式有x,y满足定理,由1可以推出3,由3可知可以由任何一步推出另一步,所以我们可以用最简形式推出所有的

所以证明扩欧定理的正确性

线性同余方程可以化简出扩欧的式子,然后求出x

然后通解为  x+num*b

这里要求为正整数,所以我们要+b%b

#include<bits/stdc++.h>
#define maxn 100005
#define mod 1000000007
using namespace std;
typedef long long ll;
ll x,y;
ll exgcd(ll a,ll b){
if(b==){
x=;
y=;
return a;
}
ll z=exgcd(b,a%b);
ll t=x;
x=y;
y=t-a/b*y;
return z;
}
int main(){
ll a,b;
cin>>a>>b;
ll z=exgcd(a,b);
//cout<<z<<endl;
cout<<(x%b+b)%b<<endl;
}

AcWing 203. 同余方程 (线性同余方程)打卡的更多相关文章

  1. AcWing 204. 表达整数的奇怪方式 (线性同余方程组)打卡

    给定2n个整数a1,a2,…,ana1,a2,…,an和m1,m2,…,mnm1,m2,…,mn,求一个最小的整数x,满足∀i∈[1,n],x≡mi(mod ai)∀i∈[1,n],x≡mi(mod  ...

  2. 数论 - n元线性同余方程的解法

    note:n元线性同余方程因其编程的特殊性,一般在acm中用的很少,这里只是出于兴趣学了一下 n元线性同余方程的概念: 形如:(a1*x1+a2*x2+....+an*xn)%m=b%m       ...

  3. POJ2115 C Looooops(线性同余方程)

    无符号k位数溢出就相当于mod 2k,然后设循环x次A等于B,就可以列出方程: $$ Cx+A \equiv B \pmod {2^k} $$ $$ Cx \equiv B-A \pmod {2^k} ...

  4. POJ1061 青蛙的约会(线性同余方程)

    线性同余方程$ ax \equiv b \pmod n$可以用扩展欧几里得算法求解. 这一题假设青蛙们跳t次后相遇,则可列方程: $$ Mt+X \equiv Nt+Y \pmod L$$ $$ (M ...

  5. POJ 2115 C Looooops (扩展欧几里德 + 线性同余方程)

    分析:这个题主要考察的是对线性同余方程的理解,根据题目中给出的a,b,c,d,不难的出这样的式子,(a+k*c) % (1<<d) = b; 题目要求我们在有解的情况下求出最小的解,我们转 ...

  6. poj2115-C Looooops -线性同余方程

    线性同余方程的模板题.和青蛙的约会一样. #include <cstdio> #include <cstring> #define LL long long using nam ...

  7. 扩展欧几里得,解线性同余方程 逆元 poj1845

    定理:对于任意整数a,b存在一堆整数x,y,满足ax+by=gcd(a,b) int exgcd(int a,int b,int &x,int &y){ ){x=,y=;return ...

  8. POJ 1061 - 青蛙的约会 - [exgcd求解一元线性同余方程]

    先上干货: 定理1: 如果d = gcd(a,b),则必能找到正的或负的整数k和l,使ax + by = d. (参考exgcd:http://www.cnblogs.com/dilthey/p/68 ...

  9. HDU3579:Hello Kiki(解一元线性同余方程组)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=3579 题目解析:求一元线性同余方程组的最小解X,需要注意的是如果X等于0,需要加上方程组通解的整数区间lc ...

随机推荐

  1. php对象方法链式调用编程

    E:\html\tproject\framework\modules\common\classes\Common\CURL.php <?php /** * 同步发起请求 * 针对http协议的8 ...

  2. centos7 安装VMware tools 出现The path "" is not a valid path to the 3.10.0-514.el7.x86_64 kernel headers

    执行:yum install "kernel-devel-uname-r == $(uname -r)"

  3. 容器————priority_queue

    #include <queue> 与queue不同的是可以自定义其中数据的优先级,让优先级高的先出队列. 优先队列具有队列的所有特性,包括基本操作,只是在这基础上添加了内部的一个排序,它本 ...

  4. CEF的备忘笔记

    CEF: Chromium Embeded Framewrok;  (Chromium嵌入式框架)可以在PC(Linux,MacOS,Windows)上把Chromium的内核嵌入到应用程序的框架: ...

  5. 自动化测试之CSS定位

    之前做自动化测试一直用RF框架来操作,发现了明显与unittest的灵活性相差一点. 重新温习了unittest框架,其中这个框架,元素定位是难点,以前更多的使用JQUERY方式定位, 发现其实与CS ...

  6. JS 常用字符串,数组操作

    JavaScript String/Array对象 JS String对象   String 对象属性 属性 描述 constructor 对创建该对象的函数的引用 length 字符串的长度 pro ...

  7. 77、tensorflow手写识别基础版本

    ''' Created on 2017年4月20日 @author: weizhen ''' #手写识别 from tensorflow.examples.tutorials.mnist import ...

  8. activiti7查询当前用户任务列表

    package com.zcc.acvitivi; import org.activiti.engine.ProcessEngine;import org.activiti.engine.Proces ...

  9. 实用maven笔记二-信息&依赖管理

    目前我经历的公司的主要项目管理工具都是maven,maven除了是一个实用的构建工具外,也是一个功能强大的项目管理工具.其管理功能分为信息管理和依赖管理.通过pom.xml文件实现. 信息管理 信息管 ...

  10. bootstrap学习(四)表格

    基础样式: 自适应沾满浏览器 <table class="table"> <tr> <th>序号</th> <th>姓名 ...