求关于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. QGroundControl编译出错记录

    运行时出现错误: /home/myfly2/Downloads/qgroundcontrol/QGroundControl: error : cannot open shared object fil ...

  2. 科学把妹法 ( ̄▽ ̄)"

    曾经有一位生物学人士,公布了工科把妹第一弹,暨“巴甫洛夫把妹法”: 每天给你那位心仪的女同事/女同学的抽屉里都放上精心准备的早餐,并且保持缄默不语,无论她如何询问,都不要说话.  如此坚持一至两个月, ...

  3. win10 解决telnet不是内部或外部命令的方案

    1.Telnet用于远程操作互联网中的设备或终端计算机服务器,可以有效的减少现场操作的麻烦.因为设备或终端是遍布整个省或市,有的甚至是国外,如何高效的处理问题是当务之急,除了telnet还可以ssh使 ...

  4. angularjs $index用来取顺序

    $index用来取顺序 null

  5. linux基础知识汇总(三)-vmware下ubuntu上网配置

    方式1 : 使用NAT共享IP的方式.使用这种方式什么都不用设置就可以在ubuntu中上网冲浪了. 备注: 1.如果ubuntu还不能上网的话,可以到我们的电脑的“服务”里面,检查“VMware NA ...

  6. Vue的安装和使用详解(一)

    Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层,不仅易于上手,还便于与 ...

  7. 如何理解c和c++的复杂类型声明

    曾经碰到过让你迷惑不解.类似于int * (* (*fp1) (int) ) [10];这样的变量声明吗?本文将由易到难,一步一步教会你如何理解这种复杂的C/C++声明. 我们将从每天都能碰到的较简单 ...

  8. 78、tensorflow滑动平均模型,用来更新迭代的衰减系数

    ''' Created on 2017年4月21日 @author: weizhen ''' #4.滑动平均模型 import tensorflow as tf #定义一个变量用于计算滑动平均,这个变 ...

  9. Anaconda详细安装及使用教程(带图文)

    https://blog.csdn.net/ITLearnHall/article/details/81708148

  10. 用 Flask 来写个轻博客 (15) — M(V)C_实现博文页面评论表单

    目录 目录 前文列表 实现 post 视图函数 在 posthtml 中添加表单 效果 前文列表 用 Flask 来写个轻博客 (1) - 创建项目 用 Flask 来写个轻博客 (2) - Hell ...