读一读

static void Main(string[] args)
{
    Console.WriteLine("输入两个整数,求最大公约数");
    int a, b;
    Stopwatch stopwatch = new Stopwatch();
    while (true) {
        a = Convert.ToInt32(Console.ReadLine());
        b = Convert.ToInt32(Console.ReadLine());
        stopwatch.Reset();
        stopwatch.Start();
        int res = getGYSByQJF(a, b);
        stopwatch.Stop();
        Console.WriteLine(res + " 用时:" + stopwatch.ElapsedMilliseconds);
    }
}

//辗转相除法
static int getGYSByZZXCF(int a, int b) {

    if (a == 0 || b == 0) {
        return 1;
    }

    int bigNum = 0;
    int minNum = 0;
    if (a > b)
    {
        bigNum = a;
        minNum = b;
    }
    else {
        bigNum = b;
        minNum = a;
    }

    int yu = bigNum % minNum;
    if (yu == 0)
    {
        return minNum;
    }
    else {
        return getGYSByZZXCF(yu, minNum);
    }
}


思路就是大数余小数得余,如果余不为0,那么余和小数的最大公约数就是大数和小数的最大公约数

计算99999999和88888888,时间为0ms


static void Main(string[] args)
{
    Console.WriteLine("输入两个整数,求最大公约数");
    int a, b;
    Stopwatch stopwatch = new Stopwatch();
    while (true) {
        a = Convert.ToInt32(Console.ReadLine());
        b = Convert.ToInt32(Console.ReadLine());
        stopwatch.Reset();
        stopwatch.Start();
        int res = getGYSByQJF(a, b);
        stopwatch.Stop();
        Console.WriteLine(res + " 用时:" + stopwatch.ElapsedMilliseconds);
    }
}

//穷举法
static int getGYSByQJF(int a, int b) {
    int bigNum = 0;
    int minNum = 0;
    if (a > b)
    {
        bigNum = a;
        minNum = b;
    }
    else if (a < b)
    {
        bigNum = b;
        minNum = a;
    }
    else {
        return a;
    }
    int result = 1;
    //穷举从2开始到最小数的一半
    for (int i = 2; i < minNum / 2; i++) {
        if (bigNum % i == 0 && minNum % i == 0) {
            result = i;
        }
    }
            
    return result;
}


运行速度可以直接参考minNum,minNum越大,运行越大

计算99999999和88888888,用时:348ms