hdu 1576 拓展欧几里得

来源:互联网 发布:泡妞软件app 编辑:程序博客网 时间:2024/05/16 14:29

主要是拓展欧几里得表达式的转换

  Ax+By=gcd(a,b)

由于gcd(b,9973)==1

所以要方程左右都乘以n

最后算出来的x*n要取余和防止负数

#include<stdio.h>#include<iostream>using namespace std;int extgcd(int a,int b,int &x,int &y){    int d=a;    if(b!=0)    {        d=extgcd(b,a%b,y,x);        y-=(a/b)*x;    }    else    {        x=1;        y=0;    }    return d;}int main(){    int n,t;    scanf("%d",&t);    while(t--)    {        int b;        scanf("%d%d",&n,&b);        int x,y;                extgcd(b,9973,x,y);        printf("%d\n",((n*x)%9973+9973)%9973);    }}


0 0
原创粉丝点击