백준(C언어)/22년 8월

8월 8일(월) - 8단계(11653번)

C0MPAS 2022. 8. 8. 15:45

8단계 - 11653번

 

11653번: 소인수분해

첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다.

www.acmicpc.net

 

문제점

1. else 안에 while 문 없이 코드를 작성했더니, 소인수분해가 아닌 그저 약수들을 늘어놓는 형태로 출력됨

-> n%i의 값이 0인 경우 즉 n이 i로 나누어떨어지는 경우에는 해당 i를 출력하고, 다시 n 값을 i로 나누는 while 문을 추가하여 해결

 

2. for 반복문의 조건을 관습적으로 i<n으로 설정하여서 6을 입력시 2만 출력 / 9991을 입력시 97만 출력되는 등의 문제가 발생

-> i<=n 으로 변경하여 해결

 

 

풀이

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)

#include <stdio.h>

int main(void)
{
	int n;
	scanf("%d", &n);

	if (n == 1)
	{
		return 0;
	}

	for (int i = 2; i <= n; i++)
	{
		if (n % i != 0)
		{
			continue;
		}
		else
		{
			while (n % i == 0)
			{
				printf("%d\n", i);
				n = n / i;
			}
		}
	}

	return 0;
}

 

출처: https://www.acmicpc.net/problem/11653