比赛 |
防止浮躁的小练习v0.6 |
评测结果 |
AAAAAAAAAA |
题目名称 |
同余方程 |
最终得分 |
100 |
用户昵称 |
cdcq |
运行时间 |
0.011 s |
代码语言 |
C++ |
内存使用 |
0.31 MiB |
提交时间 |
2016-10-20 16:48:35 |
显示代码纯文本
/*
ax=1(mod b)
ax%b=1
ax=kb+1
ax+kb=1
=======================
ax1+by1=gcd(a,b)
bx2+(a%b)y2=gcd(b,a%b)
(a,b)=(b,a%b)
ax1+by1=bx2+(a%b)y2
ax1+by1=bx2+(a-(a/b)*b)y2=bx2+ay2-(a/b)*by2=ay2+b(x2-(a/b)y2)
x1=y2
y1=x2-(a/b)y2
*/
#include<iostream>
#include<cstdio>
using namespace std;
int m,n;//( mx=1(mod n) mx%n=1 mx-ny=1)
void gcdplus(int a,int b,int &x,int &y)
{
if(b==0)
{
x=1;
y=0;
return ;
}
gcdplus(b,a%b,x,y);
int c=y;
y=x-(a/b)*y;
x=c;
return ;
}
int main()
{
//freopen("ddd.in","r",stdin);
freopen("mod.in","r",stdin);
freopen("mod.out","w",stdout);
cin>>m>>n;
int x,y;
gcdplus(m,n,x,y);
if(x<0)//注意这里
{
x+=n;
}
cout<<x<<endl;
return 0;
}