title | mathjax | comments |
---|---|---|
SPOJ ENIGMATH Solution |
true |
true |
Problem Statement ENIGMATH - PLAY WITH MATH
Heuristic
Ax - By = 0 has two possible cases:
- a can divide b or if b can divide a and you can figure out the rest.
- a or b cannot divide the other so it will be A B - B A = 0, but we still have to find the minimum x & y.
#include<stdio.h>
#include<math.h>
int main()
{
int t;
long long a,b;
scanf("%d",&t);
while(t--)
{
scanf("%lld%lld",&a,&b);
if(a%b==0||b%a==0)
{
if(a>b) printf("1 %lld\n",a/b);
else if(a<b) printf("%lld 1\n",b/a );
else printf("1 1\n");
}
else
{
while(a%2==0&&b%2==0)
{
a=a/2;
b=b/2;
}
int lim=(a<b)? sqrt(a):sqrt(b);
for(int i=3;i<=lim;i+=2)
{
while(a%i==0&&b%i==0)
{
a=a/i;
b=b/i;
}
}
printf("%lld %lld\n",b,a);
}
}
}