同余方程 P2613

P2613 同余模板
蒻蒟看不懂扩展欧几里得,就死记硬背了

//求关于 x 的同余方程 ax≡1(modb) 的最小正整数解
LL x,y;//目前方程真正的解 
void work(LL a,LL b)
{
	//当前目的:求解 ax + by = gcd(a, b) 这么一个方程
	if(b==0)//a, b不断改变的过程中,b最终必然会成为0
	{
		//在 b = 0 时方程还要成立? 使 x = 1, y = 0 ,必然成立
		x=1;
		y=0;
		return;
	}
	work(b,a%b);
	LL tempx=x;
	x=y;
	y=tempx-a/b*y;
}
int main() {
	LL a,b;
	cin>>a>>b;
	work(a,b);
	x=(x%b+b)%b;//我们求出来的x必然满足方程,但不一定是最小正整数解,所以要进行答案处理
	cout<<x;//如果 ax≡1(modb) 中的 1 为 μ ,则要变为 μ * x % b; 
	return 0;
}

另外,由于数据过大,需要使用快读的同时取模

inline LL read()
{
	LL res=0;
	char ch=getchar();
	while(!isdigit(ch) && ch!=EOF) ch=getchar();
	while(isdigit(ch))
	{
		res=(res<<3)+(res<<1)+(ch-'0');
		//若数很大,则取模 res%=MOD;
		ch=getchar();
	}
	return res;
}
posted @   石磨豆浆  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示