51nod 1256 乘法逆元 (模板)
来源:互联网 发布:精子优化处理检查 编辑:程序博客网 时间:2024/05/17 10:57
给出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
#include<bits/stdc++.h>using namespace std;//返回d=gcd(a,b);和对应于等式ax+by=d中的x,ylong long extend_gcd(long long a,long long b,long long &x,long long &y){ if(a==0&&b==0) return -1;//无最大公约数 if(b==0){x=1;y=0;return a;} long long d=extend_gcd(b,a%b,y,x); y-=a/b*x; return d;}//*********求逆元素*******************//ax = 1(mod n)long long mod_reverse(long long a,long long n){ long long x,y; long long d=extend_gcd(a,n,x,y); if(d==1) return (x%n+n)%n; else return -1;}int main(){long long n,m;cin>>n>>m;cout<<mod_reverse(n,m)<<endl;return 0;}
q神的模板:
#include<cstdio>#include<cstring>#include<cstdlib>#include<cmath>#include<iostream>#include<algorithm>using namespace std;int euler(int x){ int res=x; for(int i=2;i<=(int)sqrt(x);i++) { if(x%i==0) { res=res/i*(i-1); while(x%i==0)x/=i; } } if(x!=1) { res=res/x*(x-1); } return res;}int inv(int a,int p){ int res=1,t=euler(p)-1; while(t>0) { if(t&1)res=1LL*res*a%p; a=1LL*a*a%p; t>>=1; } return res;}int main(){ int m,n; scanf("%d%d",&m,&n); printf("%d\n",inv(m,n)); return 0;}
0 0
- 51nod 1256 乘法逆元 (模板)
- 51nod 1256 乘法逆元
- 51nod 1256 乘法逆元
- 51 nod 1256 乘法逆元
- 51nod:1256 乘法逆元
- 51nod-【1256 乘法逆元】
- 51nod 1256 乘法逆元
- [51NOD]1256 乘法逆元
- 51Nod 1256 乘法逆元
- 51nod 1256 乘法逆元
- 51nod 1256 乘法逆元
- 51Nod 1256 乘法逆元
- 51nod 1256 乘法逆元
- 51nod 1256 乘法逆元
- 51Nod 1256:乘法逆元
- 51nod 1256 乘法逆元
- 51Nod-1256 乘法逆元
- 51nod--1256 乘法逆元 (扩展欧几里得)
- 修改mysql数据库编码格式以支持中文
- Node.js in practice 笔记
- fs4412开发板学习笔记(十二)
- 数据结构学习(一)字符串截取的C语言实现
- 2014找工作总结-机会往往留给有准备的人
- 51nod 1256 乘法逆元 (模板)
- fs4412开发板学习笔记(十三)
- RSA加密解密与签名
- 黑马程序员****OC语言基础****MRC的理解
- 2015 ACM-ICPC沈阳赛区赛后心得
- fs4412开发板学习笔记(十四)
- Crazyflie2.0笔记四: eclipse编译、开发环境搭建
- 缓存操作流程逻辑
- fs4412开发板学习笔记(十五)