各种常用傻逼数论操作

减法取模再写错自杀

#include <bits/stdc++.h>
 
using namespace std;
 
#define rep(i, n) for (int i = 0; i < (int)(n); ++i)
#define pb push_back
#define mp make_pair
 
typedef long long i64;
typedef unsigned long long u64;
typedef unsigned u32;
 
const int mod = 10007;
 
int fact[mod], ifact[mod];

int add(int a, int b) {
  return (a += b - mod) < 0 ? a + mod : a;
}

int sub(int a, int b) {
  return (a -= b) < 0 ? a + mod : a;
}

int mul(int a, int b) {
  return (i64) a * b % mod;
}

int gcd(int a, int b) {
  while (b) swap(a %= b, b);
  return a;
}

int extgcd(int a, int b, int& x, int& y) {
  if (b == 0) {
    x = 1;
    y = 0;
    return a;
  }
  int q = a / b;
  int g = extgcd(b, a - q * b, y, x);
  y -= q * x;
  return g;
}
 
int inv(int a) {
  int b = mod;
  int s = 1, t = 0;
  while (b) {
    int q = a / b;
    swap(a -= q * b, b);
    swap(s -= q * t, t);
  }
  return s < 0 ? s + mod : s;
}

int binom(int n, int m) {
  if (n < m) return 0;
  if(m == 0) return 1;
  return fact[n] * ifact[m] % mod * ifact[n - m] % mod;
}
 
int foo(int n, int m) {
  int ans = 1;
  for (; m; n /= mod, m /= mod) {
    ans = ans * binom(n % mod, m % mod) % mod;
  }
  return ans;
}
 
void solve() {
  int a, b, c;
  while (~scanf("%d %d %d", &a, &b, &c)) {
    int x, y;
    int g = extgcd(a, b, x, y);
    if (c % g != 0) {
      puts("-1");
      continue;
    }
    i64 w = -c / g;
    printf("%lld %lld\n", w * x, w * y);
  }
}
 
int main() {
  solve();
}

猜你喜欢

转载自www.cnblogs.com/arg-53/p/9072781.html
今日推荐