Codeforces Round 815 (Div. 2) A. Burenka Plays with Fractions

发布时间 2023-09-10 18:45:42作者: zsxuan

给两个数 \(\frac{a}{b}\)\(\frac{c}{d}\) ,一次修改可以修改 \(a\)\(b\) 之一,求最小修改数使得 \(\frac{a}{b} = \frac{c}{d}\)

  • \(\frac{a}{b} = \frac{c}{d}\) ,除式化乘式,则讨论 \(ad = bc\) 。允许修改 \(a, b\)
  • 不妨让 \(x = min(ad, bc), y = max(ad, bc)\)
  • \(x = y\) ,修改 \(0\) 次、
  • 否则若 \(gcd(x, y) = x || y\) ,修改 \(1\) 次。
  • 否则修改两次。
view
#include <bits/stdc++.h>
long long gcd(long long a, long long b) {return b?gcd(b,a%b):a;}
void solve() {
	int a, b, c, d; std::cin >> a >> b >> c >> d;
	long long x = 1LL * a * d, y = 1LL * b * c;
	if (x > y) std::swap(x, y);
	if (x == y) std::cout << 0 << '\n';
	else if (gcd(x, y) == x || gcd(x, y) == y) std::cout << 1 << '\n';
	else std::cout << 2 << '\n';
}
signed main() {
	int _ = 1; std::cin >> _;
	while (_--) solve();
	return 0;
}