hdu 1576 A/B

自己写的不定方程的第一题

题目简述(其实是为了方便后面的描述):

已知$kx+n=By.k.n.B $已知 且$k.B$互质 求$ymodk$

-----------------------------------------------------------------------------------------------------------------------------

首先 我们可以把这个二元一次不定方程移项

得到$kx+B(-y)=-n$

由于$k.B$互质 所以$kx+B(-y)=1(gcd(k,B))$的解可以用$exgcd$求

求出一组解后$((-y)*(-n)/(-1)modk+k)%k$即为最终答案

至于$exgcd$链接中的讲解还是很不错的

http://www.cnblogs.com/ka200812/archive/2011/09/02/2164404.html

-----------------------------------------------------------------------------------------------------------------------------

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

 

posted @ 2015-08-28 10:34  sagitta  阅读(242)  评论(0编辑  收藏  举报