【codevs1200】 NOIP2012—同余方程

来源:互联网 发布:三菱plc编程手册哪里有 编辑:程序博客网 时间:2024/05/18 01:26

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;}
0 0
原创粉丝点击