codevs1200 NOIP2012—同余方程
Posted MashiroSky
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了codevs1200 NOIP2012—同余方程相关的知识,希望对你有一定的参考价值。
codevs.cn/problem/1200/ (题目链接)
题意:求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解。
Solution
这道题其实就是求a mod b的逆元x。所谓逆元其实很简单,记a的关于模p的逆
元为a^-1,则a^-1满足aa^-1≡ 1(mod p),用扩展欧几里德即可。
关于扩展欧几里德,有博客写了证明:blog.csdn.net/lincifer/article/details/49391175
代码:
// codevs1200 #include<algorithm> #include<iostream> #include<cstdlib> #include<cstring> #include<cstdio> #include<cmath> #define LL long long #define inf 2147483640 #define Pi 3.1415926535898 #define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout); using namespace std; void exgcd(LL a,LL b,LL &x,LL &y) { if (b==0) {x=1;y=0;return;} exgcd(b,a%b,x,y); LL t=x;x=y;y=t-a/b*y; } int main() { LL x,y,a,b; scanf("%lld%lld",&a,&b); exgcd(a,b,x,y); printf("%lld",(x+b)%b); return 0; }
以上是关于codevs1200 NOIP2012—同余方程的主要内容,如果未能解决你的问题,请参考以下文章