[洛谷P1082]同余方程

传送门:同余方程

题意不说了 很水……学完扩欧做的板子题
把ax≡1(modb)转化成一般线性方程ax+by=1
然后扩欧

唯一要注意的是要找最小正整数解,所以搞出来x之后需要乱搞处理一下
然后就没有了
这是一篇很水的题解……关于扩欧走这里:扩展欧几里得学习笔记

代码:

#include<bits/stdc++.h>
using namespace std;
inline int read(){
	int cnt=0,f=1;char c;
	c=getchar();
	while(!isdigit(c)){
		if(c=='-')f=-f;
		c=getchar();
	}
	while(isdigit(c)){
		cnt=cnt*10+c-'0';
		c=getchar();
	}
	return cnt*f;
}
int a,b,x,y;
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 z=x;x=y;y=z-y*(a/b);
//    return d; 
}
int main(){
	a=read();b=read();
	exgcd(a,b,x,y);
	if(b<0)b=-b;
	if(x<=0){
		while(x<0)x+=b;
		printf("%d",x);
	}
	else{
		while(x>0)x-=b;
		x+=b; 
		printf("%d",x);
	}
	return 0;
}
原文地址:https://www.cnblogs.com/kma093/p/10087253.html