自己写的不定方程的第一题
题目简述(其实是为了方便后面的描述):
已知$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 ",y); } }