2017.10.23.拓展欧几里得

本文介绍了一种用于解决同余方程的算法——拓展欧几里得算法,并通过一个具体的样例来演示如何使用该算法求解同余方程ax≡1(mod b)的最小正整数解。此外,还提供了适用于不同规模数据的算法实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

拓展欧几里得

适合题型:

。。。一些莫名其妙要用到GCD啊,LCM的题

样题:同余方程

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

样例数据
输入 
3 10
输出
7

备注
【数据范围】
对于 40% 的数据,2≤b≤1,000;
对于 60% 的数据,2≤b≤50,000,000;
对于 100% 的数据,2≤a,b≤2,000,000,000。

#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
#include<queue>
#include<vector>
using namespace std;
typedef long long ll;

inline int read()
{
    int X=0,w=1; char ch=0;
    while(ch<'0' || ch>'9') {if(ch=='-') w=-1;ch=getchar();}
    while(ch>='0' && ch<='9') X=(X<<3)+(X<<1)+ch-'0',ch=getchar();
    return X*w;
}

ll a,b,x,y;
void gcd(ll a,ll b,ll&x,ll&y){(!b)?(x=1,y=0):(gcd(b,a%b,y,x),y-=a/b*x);}
int main(){cin>>a>>b;gcd(a,b,x,y);cout<<(x+b)%b<<endl;} 

#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值