앞선 소수 문제들을 풀었다면 무난하게 풀 수 있는 문제이다.
Point
n <= 100000이기 때문에 반복문을 통해 이 문제를 가능한 빨리 풀려면,
반복문의 조건을 i < n이 아닌 i * i < n+1로 주어야 할듯하다.
n % i == 0이라면 인수 i로 나누어지기 때문에 i를 출력하고,
피인수 n은 n/=i로 값을 바꾼다.
하나의 인수로 여러 번 나누어지는 경우가 있기 때문에 이때 i를 미리 차감해야 한다.
#include <stdio.h>
int main(void)
{
int n, i;
scanf("%d", &n);
for (i = 2; i * i < n+1; i++)
{
if (n % i == 0)
{
printf("%d\n", i);
n /= i--;
}
}
if (n != 1) printf("%d\n", n);
return 0;
}
'문제풀이' 카테고리의 다른 글
[C언어] 백준 4948번 베르트랑 공준 (0) | 2022.01.05 |
---|---|
[C언어] 백준 1929번 소수구하기 (0) | 2022.01.04 |
[C언어] 백준 2581번 소수 (0) | 2022.01.03 |
[C언어] 백준 1978 소수찾기 (0) | 2022.01.03 |
[C언어] 백준 1011번 Fly me to the Alpha Centauri (0) | 2021.12.31 |