zoukankan      html  css  js  c++  java
  • 扩展欧几里得exgcd

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    typedef long double ld;
    const ll N = 1e6 + 9;
    const ll inf = 0x3f3f3f3f;
    ll exgcd(ll a, ll b, ll &x, ll &y) {
        if (!b) {
            x = 1;
            y = 0;
            return a;
        }
        ll g = exgcd(b, a%b, x, y);
        ll x1 = x;
        x = y;
        y = (x1 - a/b * y);
        return g;
    }
    void solve() {
        ll a, b, c;
        ll x, y;
        scanf("%lld%lld%lld", &a, &b, &c);
        ll g = exgcd(a, b,x, y);
        ll x1 = x*c/g;
        ll y1 = y*c/g;
        ll dx = b/g;
        ll dy = a/g;
        ll l = ceil((double)(-x1+1)/dx);
        ll r = floor((double)(y1-1)/dy);
        if (c % g != 0) {
            puts("-1");
        } else {
    		/*
    若该行对应的询问有整数解但无正整数解,包含 2 个由空格隔开的数字,
    依次代表整数解中,x 的最小正整数值,y 的最小正整数值。
    否则包含 5 个由空格隔开的数字,依次代表正整数解的数量,正整数解中,
    x 的最小值,y 的最小值,x 的最大值,y 的最大值。
    		*/
            if (l <= r) {
                ll minx = x1 + l * dx;
                ll maxx = x1 + r * dx;
                ll maxy = y1 - l * dy;
                ll miny = y1 - r * dy;
                ll cnt = r-l + 1;
                printf("%lld %lld %lld %lld %lld
    ", cnt, minx, miny, maxx, maxy);
            } else 
                printf("%lld %lld
    ", x1 + l * dx, y1 - r * dy);
        }
    }
    signed main() {
       ll t = 1;scanf("%lld", &t);
       while (t--) {
          solve();
       }
    }
    
    
  • 相关阅读:
    宏观经济指标
    线程与进程 concurrent.futures模块
    python 进程和线程(2)
    进程和线程(1)
    C++学习
    原则阅读笔记
    python类(3)感悟
    python类(2)
    打新股技巧
    python连接数据库
  • 原文地址:https://www.cnblogs.com/Xiao-yan/p/15127403.html
Copyright © 2011-2022 走看看