最近一直在学习数论,讲得很快,害怕落实的不好,所以做一道luogu的同余方程练练手。

关于x的同余方程

ax ≡ 1 mod m

那么x其实就是求a关于m的乘法逆元

ax + my = 1

对于这个不定方程的全部解是

{ x = x0 + m/gcd(a,m)

{ y = y0 - a/gcd(a,m)

我们可以用exgcd来求出其中的一组特解x0

那么什么是exgcd?

先不考虑exgcd,假设当前我们要处理的是求出 a 和 b的最大公约数,并求出 x 和 y 使得 a*x + b*y= gcd ,而我们已经求出了下一个状态:b 和 a%b 的最大公约数,并且求出了一组x1 和y1 使

得: b*x1 + (a%b)*y1 = gcd

那么我们看 a%b = (a-(a/b)*b)

所以
gcd = b*x1 + (a%b)*y1
= b*x1 + (a-(a/b)*b)*y1
= b*x1 + a*y1 – (a/b)*b*y1
= a*y1 + b*(x1 – a/b*y1)

那么我们对比前面一组 a*x + b*y = gcd

在这里 x = y1

y = x1 - a/b*y1

所以我们就可以递归来求exgcd了。

在gcd当中,gcd(a,b) = gcd(b,a%b)

那么exgcd的代码其实也多不了多少

 #include <cstdio>
#include <algorithm>
#include <iostream>
#define ll long long
using namespace std;
ll a, b, x, y, k, ans;
int exgcd(ll a, ll b)
{
if(b == )
{
x = ; y = ;
return a;
}
exgcd(b,a%b);
k = x;
x = y;
y = k - a/b * y;
return x;
}
int main()
{
cin>>a>>b;
ans = exgcd(a,b);
cout<<(ans+b)%b;
return ;
}

其实你看gcd的代码这么短,肯定是背过的吧(#滑稽),exgcd也长不了多少,不行就背过吧(逃

【luogu P1082 同余方程】 题解的更多相关文章

  1. Luogu P1082 同余方程(NOIP 2012) 题解报告

    题目传送门 [题目大意] 求关于x的同余方程 ax≡1(mod b)的最小整数解. [思路分析] 由同余方程的有关知识可得,ax≡1(mod b)可以化为ax+by=1,此方程有解当且仅当gcd(a, ...

  2. 洛谷P1082 同余方程 题解

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

  3. [Luogu P1082]同余方程

    题目链接 这道题求关于x的同余方程ax≡1(mod b)的最小正整数解.换而言之方程可以转换为ax+by=1,此时有y为负数.此时当且仅当gcd(a,b)|1时,方程有整数解. 于是乎这道题就变成了a ...

  4. luogu P1082 同余方程 |扩展欧几里得

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

  5. Luogu P1082 同余方程(exgcd模版)

    传送门 求ax%b = 1,即ax - by = 1: 很明显这是一个exgcd的形式. 那么要做这道题,首先需要gcd和exgcd的算法作铺垫. gcd(辗转相膜法): int gcd(int a, ...

  6. 洛谷 P1082 同余方程 题解

    每日一题 day31 打卡 Analysis 题目问的是满足 ax mod b = 1 的最小正整数 x.(a,b是正整数) 但是不能暴力枚举 x,会超时. 把问题转化一下.观察 ax mod b = ...

  7. 洛谷——P1082 同余方程

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

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

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

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

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

随机推荐

  1. 018-面向接口编程的BeanFactory模板代码

    1 BeanFactory工具类 package www.test.utils; import org.dom4j.Document; import org.dom4j.Element; import ...

  2. 操蛋的Django model------select_related() 主要用于一对一和一对多

    实例: 创建表,表都是一对一,一对多 class Province(models.Model): name = models.CharField(max_length=10) class City(m ...

  3. bzoj 5283: [CodePlus 2018 3 月赛]博弈论与概率统计

    Description 大家的好朋友小 L 来到了博弈的世界.Alice 和 Bob 在玩一个双人游戏.每一轮中,Alice 有 p 的概率胜利,1 -p 的概率失败,不会出现平局.双方初始时各有 0 ...

  4. [转] .net core Session , Working with a distributed cache

    本文转自:https://docs.microsoft.com/en-us/aspnet/core/performance/caching/distributed By Steve Smith+ Di ...

  5. mysql主从复制报错 :Incorrect usage of DB GRANT and GLOBAL PRIVILEGES

    在配置mysql主从复制时,想通过 grant replication slave on bbs.* to 'bbs'@'192.168.1.3' identified by '123456'; 来限 ...

  6. hdu 3642 覆盖3次以上体积

    http://www.cnblogs.com/kane0526/archive/2013/03/06/2947118.html 题目大意:给你n个立方体,求相交区域大于等于三次的体积和. 这题需要前面 ...

  7. SQLAlchemy的使用---外键ForeignKey数据库创建与连接

    # 一对多建表操作 from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() from sql ...

  8. javascript对象(2)

    这个对象,不是那个对象.续更第二篇.. 昨天说了对象的基本概念以及创建,今天来说一下它的其他方法: 1.访问属性的两种方式:点语法.[]语法 var dog =new Object(); dog.na ...

  9. Java设计模式—策略模式

    1.策略模式(Strategy Pattern)是一种比较简单的模式,也叫做政策模式(PolicyPattern). 定义如下:     Define a family of algorithms,e ...

  10. Java使用POI操作Excel文件

    1.简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式文件读和写的功能. 2.依赖的jar包 <!-- ex ...