Lyna vừa mới quyết định trở thành một nhà đầu tư bất động sản. Để đánh giá độ đẹp của mảnh đất Lyna thường quan tâm đến hai yếu tố là số hình vuông và số hình chữ nhật con có trong mảnh đất. Độ đẹp của mảnh đất được tính bằng công thức (số hình vuông con) / (số hình chữ nhật con) ở dạng tối giản. Vào một ngày đẹp trời, Việt, một người bạn lâu ngày không gặp của Lyna, đã giới thiệu cho cậu ấy một mảnh đất. Mảnh đất này được chia thành m∗n ô vuông. Các bạn hãy giúp Lyna đánh giá độ đẹp của mảnh đất do Việt giới thiệu. Lưu ý rằng, hình vuông cũng là hình chữ nhật. Dữ liệu vào Gồm 2 số n và m là lưới ô vuông miêu tả mảnh đất (1≤n,m≤10^9) Dữ liệu ra Gồm 2 số a và b lần lượt là tử số và mẫu số của phân số tối giản. Ví dụ Input 1 5 4 Output 1 4 15 Input 2 999151840 999921435 Output 2 111145137 83320239764365055 Input 3 998884600 998538848 Output 3 1998114953 1496655667674066900
1 câu trả lời
#include <iostream>
#include <algorithm>
using namespace std;
#define int __int128
template <class T>
void readInt(T& num) {
num = 0;
char c = getchar();
while (c != '-' && ('0' > c || '9' < c)) c = getchar();
bool neg = false;
if (c == '-') neg = true, c = getchar();
for(num = 0; '0' <= c && c <= '9'; c = getchar()) num = (num << 1) + (num << 3) + (c - '0');
if (neg) num = -num;
}
template <class T>
istream& operator>>(istream& i, T& x) {
readInt(x);
return i;
}
ostream& operator<<(ostream& o, const int& x) {
if (x < 0) return o << "-" << -x;
if (x < 10) return o << (char)(x + '0');
return o << x / 10 << (char)(x % 10 + '0');
}
signed main() {
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
int n, m, a, b, tmp;
cin >> n >> m;
if (n > m) swap(n, m);
a = n * (n + 1) * ((n << 1) + 1) / 6 + (n * (n + 1) * (m - n) >> 1);
b = n * (n + 1) * m * (m + 1) >> 2;
tmp = __gcd(a, b);
cout << a / tmp << ' ' << b / tmp;
}