牛客 同余方程

题意:

求关于x 的同余方程ax1(modb)ax1(modb)的最小正整数解(保证一定有解)。

思路:

ax1(modb)ax1(modb)存在yy使得ax+by=1ax+by=1,则利用扩欧求出一组解(x0,y0)(x0,y0)

根据扩欧性质,其余解为x=x0+kbd,y=y0kadx=x0+kbd,y=y0kad,其中d=gcd(a,b)d=gcd(a,b)

已知方程一定有解,dd一定为1因此xx的最小正整数解为 x=(xx=(x

Code:

复制代码
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

typedef long long ll;

ll exgcd(ll a, ll b, ll &x, ll &y){
    if(!b){
        x = 1, y = 0;
        return a;
    }
    ll d = exgcd(b, a % b, y, x);
    y -= a / b * x;
    return d;
}

int main(){
    ll a, b;
    cin >> a >> b;
    
    ll x, y;
    ll g = exgcd(a, b, x, y);
    
    g = b ;
    x %= g;
    if(x <= 0){
        x += g;
    }
    
    cout << x << endl;
    
    return 0;
}
复制代码

 

posted @   君顾  阅读(119)  评论(0编辑  收藏  举报
编辑推荐:
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
阅读排行:
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 《HelloGitHub》第 106 期
· 数据库服务器 SQL Server 版本升级公告
· 深入理解Mybatis分库分表执行原理
· 使用 Dify + LLM 构建精确任务处理应用
点击右上角即可分享
微信分享提示