[ ext{题目大意}
]
(quad)多组数据,每次给定两个数 (a,b,) 同加同减后使得 gcd((a,b)) 最大且操作次数最小。
- 显然当 (a=b) 时,( ext{gcd}) 可到无穷大,输出 "0 0"。
- 此外通过同余的规律可以发现: gcd 最大为 (|a-b|),操作次数为 (a mod ext{gcd} ,) ( ext{gcd}-a mod ext{gcd}) 中较小的一个,且只要一个满足是 gcd 的倍数,另一个必定满足(相差 ( ext{gcd}) )。
- 记得开 long long。
(quad)毕竟只是红题,非常的水。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#define int long long
#define re register int
#define il inline
il int read()
{
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)&&ch!='-')ch=getchar();
if(ch=='-')f=-1,ch=getchar();
while(isdigit(ch))x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
return x*f;
}
il void print(int x)
{
if(x<0)putchar('-'),x=-x;
if(x/10)print(x/10);
putchar(x%10+'0');
}
int n,a,b,c;
il int abs(int x){return x>0?x:-x;}
il int min(int x,int y){return x<y?x:y;}
signed main()
{
n=read();
for(re i=1;i<=n;i++)
{
a=read();b=read();
if(a==b){puts("0 0");continue;}
print(c=abs(a-b));putchar(' ');
print(min(a%c,c-a%c));putchar('
');
}
return 0;
}