分火腿

(hdogs.pas/.c/.cpp)

时间限制:1s;内存限制 64MB

题目描述:

小月言要过四岁生日了,她的妈妈为她准备了n根火腿,她想将这些火腿均分给m位小朋友,所以她可能需要切火腿。为了省事,小月言想切最少的刀数,使这n根火腿分成均等的m份。请问最少要切几刀?

输入描述:

第一行一个整数T,表示有T组数据。

接下来T组数据,每组共一行,有两个数字n,m。

输出描述:

每组数据一行,输出最少要切的刀数。

样例输入:

2

2 6

6 2

样例输出:

4

0

数据范围:

100%的数据保证T<=1000;n,m<=2147483647。

 

/*数论题 似乎搞麻烦了 可以化简*/
#include<iostream>
#include<cstdio>
#define ll long long
using namespace std;
ll T,n,m,lcm,gcd;
ll Gcd(ll x,ll y){
    return y?Gcd(y,x%y):x;
}
ll Lcm(ll x,ll y){
    return x/Gcd(x,y)*y;
}
int main()
{
    freopen("hdogs.in","r",stdin);
    freopen("hdogs.out","w",stdout);
    cin>>T;
    while(T--){
        cin>>n>>m;
        gcd=Gcd(n,m);
        n/=gcd;m/=gcd;
        lcm=Lcm(n,m);
        ll x=(lcm-n)/n*gcd;
        cout<<x<<endl;
    }
    return 0;
} 
View Code

相关文章: