백준(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;
}