萌新
Accepts: 1617 Submissions: 12270
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Problem Description
给定两个正整数 a,b,求最小和最大的 c 满足 a mod c=b mod c,满足 c-1 为正整数,且 c≤max(a,b)。
其中的 mod 表示取模运算。
Input
本题有多组测试数据。
第一行一个数 T(1≤T≤1000) 表示一共有 T组数据。对于每一组数据,输入一行两个数 a,b(1≤a,b≤1000000000)。
Output
对每组数据,输出一行两个数分别表示最小与最大的 c,如果不存在满足题意的 c,则输出一行两个 -1。
Sample Input
5
2 3
4 6
14 64
114 514
1919 810
Sample Output
-1 -1
2 2
2 50
2 400
1109 1109
因为 a mod c=b mod c,所以一定有 a-b 为 c 的倍数,于是枚举 a-b的因数进行检查即可。
注意特判 a=b 的情况,此时如果 a=1则答案为 -1,−1,否则答案为 2,a。
#include <iostream>
#include <string.h>
#include <algorithm>
#include <math.h>
using namespace std;
typedef long long ll;
int main()
{ ll t;
cin>>t;
while(t--)
{
ll a,b;
cin>>a>>b;
ll m=abs(a-b);
ll k=0;
for(int i=2;i<=m;i++)
{
if(m%i==0)
{ k=i;
break;
}
}
if(m==1||(m==0&&a<=1))
{
cout<<"-1"<<" "<<"-1"<<endl;
}
else if(m==0&&a>1)
{
cout<<"2"<<" "<<a<<endl;
}
else
cout<<k<<" "<<m<<endl;
}
return 0;
}