51 Nod 1256 乘法逆元(数论:拓展欧几里得)
基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
给出2个数M和N(M < N),且M与N互质,找出一个数K满足0 < K < N且K * M % N = 1,如果有多个满足条件的,输出最小的。
Input
输入2个数M, N中间用空格分隔(1 <= M < N <= 10^9)
Output
输出一个数K,满足0 < K < N且K * M % N = 1,如果有多个满足条件的,输出最小的。
Input示例
2 3
Output示例
2
题解:
对于求最小正K使K*M%N=1,可转换为求m*x+n*y=1的最小正解x;
需要用到拓展欧几里和定理:
m*x1+n*y1=1;
n*x2+(m%n)*y2=1;(m%n=m-m/n*n;)
=>m*x1+n*y1=m*y2+n*(x2-m/n*y2);
=>x1=y2,y1=x2-m/n*y2;
当n=0时可求出x=1;然后往前回溯即可求出结果
补充:对于求解m*x+n*y=c的解时,若c%gcd(m,n)==0,方程的解将与方程 (m/gcd(m,n))*x + (n/gcd(m,n))*y =c/gcd(m,n) 的相 同。记新方程为a*x + b*y = d,其解将是方程 a*x + b*y = 1的d倍。
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
void gcd(int m,int n,int &x,int &y)
{
if(n==0){//此时m为初始时m,n的最大公约数1
x=1;//m*x+n*y=1;m=1,n=0,则x=1;
y=0;//任意取值
return ;
}
gcd(n,m%n,x,y);
int tem=x;
x=y;
y=tem-(m/n)*y;
}
int main()
{
int m,n,x,y;
while(~scanf("%d%d",&m,&n))
{
gcd(m,n,x,y);//m*x+n*y=1(m,n互质则gcd(m,n)=1);
if(x>0)//x>0
printf("%d\n",x);
else//若x<=0,则k要加上m的整数倍(只有这样才能通过改变y的值抵消使右边保持为1)
printf("%d\n",n+x%n);
}
return 0;
}
51 Nod 1256 乘法逆元(数论:拓展欧几里得)的更多相关文章
- poj 1845 【数论:逆元,二分(乘法),拓展欧几里得,费马小定理】
POJ 1845 题意不说了,网上一大堆.此题做了一天,必须要整理一下了. 刚开始用费马小定理做,WA.(poj敢说我代码WA???)(以下代码其实都不严谨,按照数据要求A是可以等于0的,那么结果自然 ...
- 51nod--1256 乘法逆元 (扩展欧几里得)
题目: 1256 乘法逆元 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出2个数M和N(M < N),且M与N互质,找出一个数K满足0 < ...
- SGU 141.Jumping Joe 数论,拓展欧几里得,二元不等式 难度:3
141. Jumping Joe time limit per test: 0.25 sec. memory limit per test: 4096 KB Joe is a frog who lik ...
- 51nod1256 乘法逆元【扩展欧几里得】
给出2个数M和N(M < N),且M与N互质,找出一个数K满足0 < K < N且K * M % N = 1,如果有多个满足条件的,输出最小的. Input 输入2个数M, N中间用 ...
- 51nod 125乘法逆元 (扩展欧几里得)
给出2个数M和N(M < N),且M与N互质.找出一个数K满足0 < K < N且K * M % N = 1,假设有多个满足条件的.输出最小的. Input 输入2个数M, N中间用 ...
- (拓展欧几里得)51NOD 1256 乘法逆元
给出2个数M和N(M < N),且M与N互质,找出一个数K满足0 < K < N且K * M % N = 1,如果有多个满足条件的,输出最小的. 输入 输入2个数M, N中间用空 ...
- ACM数论-欧几里得与拓展欧几里得
ACM数论——欧几里得与拓展欧几里得 欧几里得算法: 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数. 基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd ...
- 51Nod 1256 乘法逆元 Label:exgcd
1256 乘法逆元 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 给出2个数M和N(M < N),且M与N互质,找出一个数K满足0 < K < N且K ...
- [zoj 3774]Power of Fibonacci 数论(二次剩余 拓展欧几里得 等比数列求和)
Power of Fibonacci Time Limit: 5 Seconds Memory Limit: 65536 KB In mathematics, Fibonacci numbe ...
随机推荐
- dubbo源码分析12——服务暴露3_doExportUrls()方法分析
本文紧接上文,doExportUrls()方法位于ServiceConfig类中,代码入口如下: private void doExportUrls() { List<URL> regis ...
- 用while实现阶乘
题目描述: 用while语句求1!+2!+3!+...+10! #include<iostream> #include<cstdio> using namespace std; ...
- Liunx系统命令sed的使用
作者:邓聪聪 Liunx命令中sed的使用历程 sed [-nefr] [动作]选项与参数:-n :使用安静(silent)模式.在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出 ...
- Python调用subprocess.Popen卡死的解决方案
转载自:https://www.cnblogs.com/keke-xiaoxiami/p/7875009.html 在Python中,调用:subprocess.Popen(cmd, stdout = ...
- 题解-AtCoder Code-Festival2017qualA-E Modern Painting
Problem CODE-FESTIVAL 2017 qual A 洛谷账户的提交通道 题意:有一个\(n\)行\(m\)列的方格,在边界外有可能有机器人(坐标为\((0,x),(n+1,x),(x, ...
- VS2013 VS2015 VS2017调试出现无法启动iis express web服务器
最近老是遇到这个问题,天天如此,烦死人,网上答案繁多,但是都解决不了,也是由于各种环境不同导致的,这里把几种解决方法都记录下 一.其他项目都可以,就这么一个不行 因为其他项目都可以,就这么一个不行,所 ...
- 【转】gcc中的-w -W和-Wall选项
-w的意思是关闭编译时的警告,也就是编译后不显示任何warning,因为有时在编译之后编译器会显示一些例如数据转换之类的警告,这些警告是我们平时可以忽略的. -Wall选项意思是编译后显示所有警告. ...
- windows下java环境变量的配置 javac不是内部或外部命令的问题
安装配置JAVA JDK 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html . 下载你电脑对应的JDK,下 ...
- java interview
gitbook address https://dongchuan.gitbooks.io/java-interview-question/content/java/==_equal.html
- LabVIEW-PC-PLC-MCU串口通信-介绍很全
链接:https://pan.baidu.com/s/1dG9nuPN 密码:vnpf