Need help in question SINS

I’ve got a problem . it’s called deadly sins, here’s the link: SINS Problem - CodeChef
Here’s the right code :

#include<stdio.h>
 
int GCD(int x, int y){
 if(y==0)
 return x;
 else
 return (GCD(y,x%y));
}
int main() {
  int X,Y,T,result,gcd;
  scanf("%d",&T);
  for(;T>0;T--){
  scanf("%d %d",&X,&Y);
  if(X>Y){
    gcd = GCD(X,Y);
    }
    else{
      gcd = GCD(Y,X);
    }
    printf("%d\n",2*gcd );
   }
 
  return 0;
}

I don’t understand the logic of this code (the gcd() and printf) someone please explain this to me.
And here’s my code:

  #include <stdio.h>
     //Compiler version gcc 6.3.0
     
     int main(void)
     {
     	int m, b, t, x, y, z;
     	scanf ("%d",&t);
     	z=t;
     	scanf ("%d%d",&m, &b);
     next :	while(m!=b)
     	{
     	if(m>b)
     	m=m-b;
     	if(m<b)
     	b=b-m;
     	t--;
     	if(m==b)
     	{x=m;
     	y=b;
     		printf("%d\n",x+y);
     		if (z>1)
     	{
     	scanf("%d%d",&m, &b);
     	goto next;
     	} 
     	} 
     	}
     	
     	
     	return 0;
     }

I know it’s wrong but can somebody help me fix this code without changing the logic.

1 Like

In the correct code gcd() is a function which computes the greatest common divisor of two numbers( refer Program to Find GCD or HCF of Two Numbers - GeeksforGeeks )
The problem statement says that we have to make X and Y equal. Your solution gets a TLE verdict because X and Y are as large as 10^9 so repeated subtraction operations will consume a lot of time. That’s why you need to make a small observation. At the end both will be left with same chocolates which is the GCD of X,Y. You can take a look at given examples and verify it.
As both are left with gcd total candies left are gcd+gcd i.e. 2gcd. printf statement at the end outputs the final answer( 2gcd).