• 扩展欧几里得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();
       }
    }
    
    
  • 相关阅读:
    zabbix监控部署(三)
    zabbix监控部署(二)
    zabbix监控部署(一)
    Docker安装mysql5.7
    Docker修改容器默认存储路径
    MySQL全量+增量备份脚本
    企业级Dokcer镜像仓库Harbor部署
    Linux环境pyhon3安装pyinstaller
    配置Hive元数据数据库为PostgreSQL
    Oracle 11gR2 RAC 添加节点
  • 原文地址:https://www.cnblogs.com/Xiao-yan/p/15127403.html
Copyright © 2020-2023  润新知