分火腿 \operatorname{分火腿} 分火腿
题目链接: SSL比赛 1493 \operatorname{SSL比赛\ 1493} SSL比赛 1493
题目
输入
输出
样例输入
2
2 6
6 2
样例输出
4
0
数据范围
思路
这道题就是一道简单的数学题。
先求出两个数的 gcd ,然后公式就是:
(
(
m
/
g
c
d
)
−
1
)
∗
m
/
(
m
/
g
c
d
)
((m / gcd) - 1) * m / (m / gcd)
((m/gcd)−1)∗m/(m/gcd) 。
就算出让每个人各有一小份(合起来刚好是整数个火腿,最后一次不用切)所需要切的数量,和按这样分没人有多少小块,乘起来就是这个公式。
代码
#include<cstdio>
#define ll long long
using namespace std;
ll T;
ll n, m;
ll gcd;
ll GCD(ll x, ll y) {
if (!y) return x;
return GCD(y, x % y);
}
int main() {
scanf("%d", &T);//读入
for (ll times = 1; times <= T; times++) {
scanf("%d %d", &n, &m);//读入
gcd = GCD(n, m);//求出gcd
printf("%d\n", ((m / gcd) - 1) * m / (m / gcd));//公式
}
return 0;
}