exgcd模板--noip2012同余方程

模板。。不过还是讲一下

题目描述

求关于x的同余方程 ax≡1(mod)b的最小正整数解。


我们可以把这个方程转化一下,变成 ax+by=1

因为 题目保证有解,所以a,b互质

裸的exgcd

AC Code

#include<cstdio>
#include<iostream>
using namespace std;
int a,b;
int exgcd(int a,int b,int &x,int &y)
{
	if(b==0)
	{
		x=1;y=0;
		return a;
	}
	int t=exgcd(b,a%b,y,x);
	y-=a/b*x;
	return t;
}
int main()
{
	scanf("%d%d",&a,&b);
	int x,y;
	int gcd=exgcd(a,b,x,y);
	printf("%d",(x%b+b)%b);

	return 0;
}

2018.9.14补充-------------------分割线--------------------------

求直线ax+by+c=0上有多少个整点(x,y)满足x满足x属于[x1,x2],y属于[y1,y2]。

 求ax+by=c的解

求这个解有个前提,就是gcd(x,y)|c,否则没有整数解

那么我们就可以两边乘上c/g,就是把x,y同时乘上c/g,就是一组解

设此解为x0,y0

ax0+by0=c

则通解为x0+t*(b/gcd(a,b)),y0-t*(a/gcd(a.b))

这样就能得到所有解了

完结撒花~·~~~··~~~

 

posted @ 2018-07-19 09:13  Richardluan  阅读(3)  评论(0)    收藏  举报