怎么优化最后结果是最大公约数

题目是求最大公约数,编写了一下,只能求出所有的公约数,如何优化能在结果中只显现最大的那一项呢,谢谢求解

img

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int a, b;
int min;
int i = 1;
scanf("%d, %d", &a, &b);
if (a > b)
{
min = b;
}
else
{
min = a;
}
for (i = 1; i <= min; i++)
{
if (a%i == 0 && b%i == 0)
{
printf("公约数:%d", i);
}

}

定义一个 int max=-1;
公约数存到数组 a[i ]
遍历数组

#include<stdio.h>
int main()
{
    int m, n, temp, i;
    printf("Input m & n:");
    scanf("%d%d", &m, &n);
    if(m<n)  /*比较大小,使得m中存储大数,n中存储小数*/
    { /*交换m和n的值*/
        temp=m;
        m=n;
        n=temp;
    }
    for(i=n; i>0; i--)  /*按照从大到小的顺序寻找满足条件的自然数*/
        if(m%i==0 && n%i==0)
        {/*输出满足条件的自然数并结束循环*/
            printf("The GCD of %d and %d is: %d\n", m, n, i);
            break;
        }
   
    return 0;
}

如果 max<a[i];则把 a[i] 赋值给max
即 max=a[i]
循环结束 max即为最大公约数
你这个题求公约数方法看着也不太好

    int a, b;
    int min;
    int i = 1;
    int max= 0;
    scanf("%d, %d", &a, &b);
    if(a > b)
    {
        min = b;
    }
    else
    {
        min = a;
    }
    for(i = 1; i <= min; i++)
    {
        if(a%i == 0 && b%i == 0)
        {
            if(max < i)
            {
                max = i;
            }
            printf("公约数:%d", i);
        }
    }
    printf("最大公约数:%d", max);

采用降序循环,得到第一个就用break退出循环。

#include<stdio.h>

int main()
{
    int a, b;
    int i, min;

    scanf("%d,%d", &a, &b);
    
    min = a>b ? b : a;
    
    for (i = min; i > 0; i--)
    {
        if ((a%i == 0) && (b%i == 0))
        {
            printf("公约数:%d", i);
            break;
        }
    
    }
    
    return 0;
}