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 ...
随机推荐
- android listView功能简介
本文参考连接:http://blog.csdn.net/kesenhoo/article/details/7196920 android中listView是非常常用的组建,下边就经常用到的功能做一下简 ...
- dubbo源码分析2——SPI机制中的SPI实现类的读取和预处理
SPI机制中的SPI实现类的读取和预处理是由ExtensionLoader类的loadFile方法来完成的 loadFile方法的作用是读取dubbo的某个SPI接口的spi描述文件,然后进行缓存,缓 ...
- 一个优秀windows C++ 程序员该有哪些知识
- C++游戏开发需要阅读的书籍
如果要自学游戏程序开发的话,可以看看下面的,呵呵. 游戏开发资料(PDF书都是中文版的,非英文,很多是本人自己扫描制作,从未网上发布过,所以独家啦): 1.Gamebryo 2.2游戏引擎(盛大.腾 ...
- [转]JS根据useAgent来判断edge, ie, firefox, chrome, opera, safari 等浏览器的类型及版本
js根据浏览器的useAgent来判断浏览器的类型 userAgent 属性是一个只读的字符串,声明了浏览器用于 HTTP 请求的用户代理头的值. JavaScript语法:navigator.use ...
- mysql备份和bin-log日志
总结]:mysql备份和bin-log日志 备份数据: mysqldump -uroot -p123456 test -l -F '/tmp/test.sql' -l:读锁(只能读取,不能更新) -F ...
- 【原创】大数据基础之Flume(2)kudu sink
kudu中的flume sink代码路径: https://github.com/apache/kudu/tree/master/java/kudu-flume-sink kudu-flume-sin ...
- 发布python模块
首先要写好模块和setup.py,把他们放在同一个文件夹下,图例是放在了stuManage文件夹下,setup.py具体内容如下: 然后打开终端,切到stuManage文件夹下开始发布 现在就可以跟p ...
- 获得小程序码getWXACodeUnlimit
报错47001 data format error 出现这个错误必须是Body里面的raw才可以,而且access_token参数必须写在地址后面,不能写在raw里面,不然也出错. /** * 生命周 ...
- j2cache笔记
初步理解 eg: https://my.oschina.net/javayou https://my.oschina.net/tinyframework/blog/538363?p=2 https:/ ...