P1082 [NOIP2012 提高组] 同余方程题解
__vector__ · · 个人记录
置顶消息:
zgc大佬认为本题解的
难度:\color{green}\text{普及+/提高}
题目分析:
题目要求关于
可以发现,
这么转化的原因是
转化完之后就可以直接用扩欧求解了。
最后答案可能不是最小,也可能是负数。
先上一个式子:
若
那么
注解:
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a,b;
ll x,y;
void exgcd(ll a,ll b)
{
if(b==0)
{
x=1;
y=0;
return;
}
exgcd(b,a%b);
ll tmp=x;
x=y;
y=tmp-a/b*y;
}
int main()
{
scanf("%lld%lld",&a,&b);
exgcd(a,b);
printf("%lld",(x%b+b)%b);
return 0;
}