先用一种觉得比较简单的方法做一下
辗转相除法(又名欧几里德法)
思路:两数相等,则最大公约数为自己
两数不等,大数除以小数取余,如果取余不等于0,则用被除数(上面的小数)与取余得到的值继续相除取余,直到当余数为0,即能整除的时候,小的那个数就是最大公约数
代码没优化,记录一下,有时间看看能不能再优化
c#代码如下:
int GetNumber(int a,int b)
{
if (a == b)
{
Debug.Log(a + " " + b + " 的最大公约数为:" + a);
return a;
}
int temp = 0;
int temp_min = 0;
temp = a > b ? a % b : b % a;
temp_min = a > b ? b : a;
if(temp == 0)
{
Debug.Log(a + " " + b + " 的最大公约数为:" + temp_min);
return temp_min;
}
int result = temp;
while (temp != 0)
{
temp = temp_min > temp ? temp_min % temp : temp % temp_min;
temp_min = temp_min > temp ? temp : temp_min;
if(temp != 0)
{
result = temp;
}
}
Debug.Log(a + " " + b + " 的最大公约数为:" + result);
return result;
}