题目地址:51Nod 1256
题意:给出2个数M和N(M < N),且M与N互质,找出一个数K满足0 < K < N且K * M % N = 1,如果有多个满足条件的,输出最小的。
思路:K*M%N=1可以写成K*M-Y*N=1,这样公式就变成了扩展欧几里德求K值。因为是要求最小的,所以求出特解K以后,要变成(K%N+N)%N。

#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <sstream>
#include <algorithm>
#include <set>
#include <queue>
#include <stack>
#include <map>
#include <bitset>
#pragma comment(linker, "/STACK:102400000,102400000")
using namespace std;
typedef __int64 LL;
const int inf=0x3f3f3f3f;
const double pi= acos(-1.0);
const double esp=1e-6;
using namespace std;
const int Maxn=1e6+10;
bitset<Maxn>pri;
LL gcd(LL a,LL b)
{while(b!=0){int r=b;b=a%b;a=r;}return a;
}
void exgcd(LL a,LL b,LL &x,LL &y)
{if(b==0){x=1;y=0;return ;}exgcd(b,a%b,x,y);LL t=x;x=y;y=t-(a/b)*y;
}
int main()
{LL m,n;LL x,y;while(~scanf("%lld %lld",&m,&n)){LL G=gcd(m,n);m/=G;n/=G;exgcd(m,n,x,y);x=(x%n+n)%n;printf("%lld\n",x);}return 0;
}

51Nod 1256-乘法逆元(扩展欧几里德)相关推荐

  1. 51nod 1256 乘法逆元

    51nod 1256 乘法逆元 http://www.51nod.com/Challenge/Problem.html#!#problemId=1256 theory https://baike.ba ...

  2. 51Nod 1256 乘法逆元 Label:exgcd

    1256 乘法逆元 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 给出2个数M和N(M < N),且M与N互质,找出一个数K满足0 < K < N且K ...

  3. 51nod 1256 乘法逆元(扩展欧几里得)

    问题: 给出2个数M和N(M < N),且M与N互质,找出一个数K满足0 < K < N且K * M % N = 1,如果有多个满足条件的,输出最小的. Input 输入2个数M, ...

  4. c语言中欧几里得模乘法逆元,扩展欧几里得算法同余方程模m乘法逆元详解

    欧几里德算法: 复习:求最大公约数算法(欧几里得算法.也叫辗转相除法).欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数. 基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd ...

  5. 表格法轻松理解扩展欧几里得算法以及利用其求乘法逆元

    文章目录 扩展欧几里得算法 求乘法逆元 扩展欧几里得算法 具体算法的原理参见扩展欧几里得算法求乘法逆元,本文仅以表格的形式展现计算过程,浅显易懂.下面通过例子进行说明. 例:求1234和4321的最大 ...

  6. 乘法逆元的解法及证明

    写在前面 刷题过程中,为了避免高精度的整数运算,常常会要求答案对某个数取模.但这衍生了一个新问题,如果运算过程中涉及了除法,如ab\frac{a}{b}ba​,如果先对a和b取模再做除法,会导致答案错 ...

  7. 欧几里德算法与扩展的欧几里德算法及乘法逆元

    欧几里德算法与扩展的欧几里德算法及乘法逆元 欧几里德算法 扩展的欧几里德算法 乘法逆元 以下提到的数都是整数. 欧几里德算法 欧几里德算法用于求解最大公倍数,也就是辗转相除法.其结论非常简洁,对任意整 ...

  8. 扩展欧几里德算法计算乘法逆元详解

    乘法逆元的定义: A * X MOD N == 1则称X为A关于模N的乘法逆元. 注: 只有两个数互素的时候才会有乘法逆元. 两个数不互素是没有乘法逆元的. 费马小定理: 利用费马小定理只能求出N为素 ...

  9. gcd + 扩展欧几里得定理+递推乘法逆元(模板)

    gcd: int gcd(int a, int b){ return b==0? a: gcd(b, a%b); } 扩张欧几里得定理: 扩展欧几里德算法是用来在已知a, b求解一组x,y使得ax+b ...

最新文章

  1. Django源码分析3:处理请求wsgi分析与视图View
  2. php 语言文件操作,php中目录文件操作详谈
  3. 如何仅从git存储库中稀疏签出单个文件?
  4. 【开发环境】Mac 安装 PyCharm 开发环境 ( 下载 PyCharm | 安装 PyCharm )
  5. UE满足发射功率要求是指
  6. 前端学习(83):按显示进行分类
  7. 《2021国庆出行报告》出炉:全国高速拥堵里程占比同比下降37%
  8. 软件工程导论 09章面向对象方法学
  9. 创建一个简单的数据库
  10. Web前端的状态管理
  11. 如何在一个月内通过PMP考试?(含资源)
  12. pip常用指令及numpy安装
  13. 大华设备播放过程中设置播放速度
  14. 农村有人收旧房梁,一根100多,破木头有啥用?
  15. 酷客多小程序百城宣讲会-郑州站圆满成功
  16. Multiplier和Finger的区别和优劣讨论
  17. 清除input自动填充背景色
  18. 开发后台界面用 div好,还是frame 框架 好?
  19. loss scale的理解
  20. 九张图看懂互联网金融模式

热门文章

  1. 红米K20充不进电导致问题扩大手机直接不开机维修方法很简单
  2. python计算最大回撤_12最大回撤数据分析
  3. linux访问共享命令,Linux访问共享资源命令 smbclient
  4. Fluke TiS60+红外热像仪 福禄克TiS60+热成像仪
  5. 给定一个层数n,输出字母三角形
  6. SQL 语句大全、MySQL原生操作语句
  7. 全球及中国养老保险行业创新模式分析与投资建议策略报告2022版
  8. IEEE802.1as与1588区别
  9. android wifi p2p / wifi direct
  10. 直播客的张鑫焱的新创意