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();
       }
    }
    
    
  • 相关阅读:
    前端 -- html
    MySQL索引
    Python操作MySQL
    MySQL表操作进阶
    MySQL表操作基础
    Github使用教程
    Android开发面试题
    MYSQL学习记录
    Java开发从零到现在
    JavaWeb(JSP/Servlet/上传/下载/分页/MVC/三层架构/Ajax)
  • 原文地址:https://www.cnblogs.com/Xiao-yan/p/15127403.html
Copyright © 2011-2022 走看看