Pagini recente » Borderou de evaluare (job #565589) | Cod sursa (job #3212373) | Cod sursa (job #498304) | Cod sursa (job #263992) | Cod sursa (job #964127)
Cod sursa(job #964127)
#include <fstream>
using namespace std;
inline int abs_dif(int a,int b)
{
if(a>b)
return (a-b);
return (b-a);
}
int cmmdc(int a,int b)
{
//cout<<"cmmdc("<<a<<","<<b<<")\n";
if(!b)
return a;
if(!a)
return b;
if(!(a&1))
{
if(!(b&1))
return (cmmdc(a>>1,b>>1)<<1);
else
return cmmdc(a>>1,b);
}
else
{
if(!(b&1))
return cmmdc(a,b>>1);
else
return cmmdc(abs_dif(a,b)>>1,min(a,b));
}
}
int main()
{
int t,a,b,i;
ifstream fin("euclid2.in");
ofstream fout("euclid2.out");
fin>>t;
for(i=0;i<t;i++)
{
fin>>a>>b;
fout<<cmmdc(a,b)<<'\n';
}
fin.close();
fout.close();
return 0;
}