NOIP2012同余方程

通过这道题略懂了扩展gcd和逆元

形如ax=1(mod b)的同余方程中x的最小正整数解叫做a模b的逆元

逆元定义大概就是一个运算取消

扩展gcd可以求解形如ax+by=gcd(a,b)的二元方程

题目中的ax=1(mod b)即可化作ax+by=1,原题中的保证有解意思就是ab互质

代码:

#include<bits/stdc++.h>

using namespace std;
#define ll long long

//求ax+by=gcd(a,b)的解
void exgcd(int a,int b,int &x,int &y){
	if(b==0){x=1;y=0;return;}
	exgcd(b,a%b,x,y);
	int t=x;x=y;y=t-a/b*y;
}

int main(){
	ll a,b;
	scanf("%lld%lld",&a,&b);
	int x,y;
	exgcd(a,b,x,y);
	cout<<x<<" "<<y<<endl;
	x=(x%b+b)%b;
	printf("%d\n",x);
}

关于逆元的知识还很多。。数学方面的知识基本还是空白。。

最大连续子区间和我还真忘了怎么敲。。。

posted @ 2017-07-02 21:12  Drenight  阅读(191)  评论(0编辑  收藏  举报