zoukankan      html  css  js  c++  java
  • 牛客 同余方程

    题意:

    求关于x 的同余方程$ax ≡ 1 (mod b)$的最小正整数解(保证一定有解)。

    思路:

    $ax ≡ 1 (mod b)$存在$y$使得$ax + by = 1$,则利用扩欧求出一组解$(x_0, y_0)$。

    根据扩欧性质,其余解为$x = x_0 + k * frac{b}{d}, y = y_0 - k * frac{a}{d}$,其中$d = gcd(a, b)$。

    已知方程一定有解,$d$一定为1因此$x$的最小正整数解为 $x = (x % b + b) % b$

    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;
    }
  • 相关阅读:
    2-SIFT简介
    1-SIFT资源整理
    1-vs2015+opencv 3.2.0配置
    5-load-on-startup
    4-监听器
    3-过滤器
    第09组 Alpha冲刺 (1/6)
    第09组(71) 需求分析报告
    第9组(71) 团队展示
    结对编程作业
  • 原文地址:https://www.cnblogs.com/jungu/p/13412031.html
Copyright © 2011-2022 走看看