同余方程(学习笔记)

同余方程

同余方程是一个数学方程式。该方程式的内容为:对于一组整数Z,Z里的每一个数都除以同一个数m,得到的余数可以为0,1,2,…m-1,共m种。我们就以余数的大小作为标准将Z分为m类。每一类都有相同的余数。

模板

问题描述

a x ≡ 1 ( m o d ) b ax≡1( mod )b ax1(mod)b

如果你看不懂这个式子,那么我就将其转化一下,这个式子就是等于
ax%b=1%b,在这里插入图片描述
对于转换过的式子我们可以再将其进行二次转换
ax+by=1,这个式子是不是很熟悉啊,没错,这就是拓展欧几里得可以解不等方程,如果不会拓展欧几里得的可以看拓展欧几里得

细节到最后,如果 x x x 太小就不断加 b b b 直到大于等于 0 0 0,太大则一直减 b b b,直到最小正整数解。也就是这么写:(x+b)%b

#include<bits/stdc++.h>
#define int long long
using namespace std;
int x,y,a,b;
inline exgcd(int a,int b)//拓展欧几里得求解方程
{
	if(!b){x=1;y=0;return a;}
	int r=exgcd(b,a%b);
	int tmp=x;
	x=y;y=tmp-a/b*y;
	return r;
}

signed main()
{
	cin>>a>>b;
    exgcd(a,b);
    cout<<(x+b)%b;//处理负数
    return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值