[c]

최대공약수 구하기 (feat. 유클리드 호제법)

Gernii K 2023. 6. 4. 15:40

내 코드

int main(void)
{
	int num1, num2;
	int bigger;
	printf(" 두 수 입력 : ");
	scanf("%d %d", &num1, &num2);
	bigger = num1 > num2 ? num1 : num2;

	int i = 1;
	int max;
	printf("%d와 %d의 공약수는 \n", num1, num2);
	while (bigger)
	{
		if (num1 % i == 0 && num2 % i == 0)
		{
		printf("%d\n", i);
		max = i;
		}
		i++;
		bigger--;
	}
	printf("최대 공약수는 : %d", max);
	return 0;
}

많이 난잡하다.

스토리 올리면서 생각했는데 bigger 숫자로 돌리는게 아니라 smaller 숫자로 해야하는구나

 

수정1

int main(void)
{
	int num1, num2;
	int smaller;
	printf(" 두 수 입력 : ");
	scanf("%d %d", &num1, &num2);
	smaller = num1 < num2 ? num1 : num2;

	int i = 1;
	int max;
	printf("%d와 %d의 공약수는 \n", num1, num2);
	while (smaller)
	{
		if (num1 % i == 0 && num2 % i == 0)
		{
		printf("%d\n", i);
		max = i;
		}
		i++;
		smaller--;
	}
	printf("최대 공약수는 : %d", max);
	return 0;
}

 

 

유클리드 호제법이라고 있다고 한다.

최대공약수를 구하는 알고리즘이라는데

 

C코드 #1 

재귀함수

int gcd(int a, int b)
{
	return b ? gcd(b, a%b) : a;
}

C코드 #2

int gcd(int a, int b)
{
    int c;
	while(b)
	{
		c = a % b;
		a = b;
		b = c;
	}
    return a;
}