using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
/*
求三个数的最小公倍数的方法
*
* 通常会使用下面的hcf函数做 但效率低
*
* greatestCommonDivisor是另一种方法
* 例如
* 210 % 27 = 21
* 27 % 21 =6
* 21 % 6 = 3
* 6%3=0;
* 当余数为0的前一步就是他们的最小公倍数
*/
class Program
{
//通常方法
static int HCF(int pNum1, int pNum2, int pNum3)
{
int minNum = pNum1 < pNum2 ? pNum1 : pNum2;
minNum = minNum < pNum3 ? minNum : pNum3;
if (pNum1 % minNum == 0 && pNum2 % minNum == 0 && pNum3 % minNum == 0)
{
return minNum;
}
//除以最小一个
for (int i = minNum / 2; i > 0; i--)
{
if (pNum1 % i == 0 && pNum2 % i == 0 && pNum3 % i == 0)
return i;
}
return -1;
}
int greatestCommonDivisor(int a, int b)
{
int result = 0;
//swap
if (a > b) { a ^= b; b ^= a; a ^= b; }
//a 较小数 b较大数
//除不尽一直递归
while (b % a != 0)
{
result = greatestCommonDivisor(b % a, a);
break;
}
if (b % a == 0 && a != 0)
result = a;
return result;
}
static void Main(string[] args)
{
Program p = new Program();
int x, y, z, w, v;
Console.Write("请输入你要求公因子的三个整数:\r\n");
x = 12;
y = 64;
z = 32;
w = p.greatestCommonDivisor(x, y);
v = p.greatestCommonDivisor(w, z);
Console.WriteLine(v);
//Console.ReadLine();
}
}
}