1. 程式人生 > >Day5-T1

Day5-T1

原題目

  小月言要過四歲生日了,她的媽媽為她準備了n根火腿,她想將這些火腿均分給m位小朋友,所以她可能需要切火腿。為了省事,小月言想切最少的刀數,使這n根火腿分成均等的m份。請問最少要切幾刀?

  第一行一個整數 T,表示有 T 組資料,對於每組測試資料格式如下: 每組共一行,有兩個數字 N 和 M;意義如題目描述;

  輸出共 T 行,每組資料一行,輸出最少要切的刀數。

S1:

  Input:

 

2
2 6
6 2

 

  Output:

4
0

 


 

  Describe:小小的數論題。

  code:

#include<bits/stdc++.h>
#define INF 214748364
#define eps 1e-9
#define rep1(a,b) for(register int i=(a);i<=(b);i++)
#define rep2(a,b) for(register int j=(a);j<=(b);j++)
using namespace std;
long long t,a,b,ans;
inline int read(){
	int ret=0,f=1;char ch=getchar();
	while (ch<'0'||ch>'9') {if (ch=='-') f=-f;ch=getchar();}
	while (ch>='0'&&ch<='9') ret=ret*10+ch-'0',ch=getchar();
	return ret*f;
}
inline double read2(){
    double X=0,Y=1.0;int w=0;char ch=0;
    while(!isdigit(ch)){w|=ch=='-';ch=getchar();}
    while(isdigit(ch))X=X*10+(ch^48),ch=getchar();
    ch=getchar();
    while(isdigit(ch)) X+=(Y/=10)*(ch^48),ch=getchar();
    return w?-X:X;
}
inline void write(int x){
	if(x<0){putchar('-');write(-x);return;}
    if(x/10) write(x/10);
    putchar(x%10+'0');
}
int main(){
    //freopen("hdogs.in","r",stdin);
    //freopen("hdogs.out","w",stdout);
    t=read();
    while(t--)
    {
    	ans=0,a=0,b=0;a=read(),b=read();
        if(a%b==0){puts("0");continue;}                         //能均分(n>m)
		a%=b;long long f=__gcd(a,b);                    //a>=b轉化為a<b[能分的先分]
        f=a/f;b--,a--;                                          //已經切了一刀
        ans=b-a/f;write(ans);puts("");                          //玄學通項
    }
    return 0;
}