정수 N이 주어졌을 때, 소인수분해하는 프로그램을 작성하시오.
첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다.
N의 소인수분해 결과를 한 줄에 하나씩 오름차순으로 출력한다. N이 1인 경우 아무것도 출력하지 않는다.
#include <stdio.h>
#include <stdlib.h>
void calculate(int num) {
int temp = 2;
int *prime = (int *)malloc(sizeof(int) * (num + 1));
for (int i = 0; i <= num; i++) {
prime[i] = 0;
}
while (num != 1) {
while (num % temp == 0) {
num = num / temp;
printf("%d\n", temp);
}
temp++;
}
free(prime);
}
int main() {
int num;
scanf("%d", &num);
calculate(num);
return 0;
}
초기에 했던 실수는 배열의 크기를 너무나도 크게 잡았는데 스택 오버플로우 오류가 발생할 수 있다는 점이였다.
이를 해결하기 위해서 동적할당을 이용하였다. (malloc)