본문 바로가기
컴퓨터/C, C++

[C/C++] 백준 11653 C언어

by stdFrog 2022. 6. 7.

백준 11653번

 

정수 N이 주어졌을 때, 소인수 분해하는 프로그램을 작성하시오.

 

입력

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

 

출력

N의 소인수분해 결과를 한 줄에 하나씩 오름차순으로 출력한다. N이 1인 경우 아무것도 출력하지 않는다.

 

#include <stdio.h>

int main()
{
        int N=0,P=2;
        scanf("%d", &N);
        for(int i=0; N>1; i++){
                if(N%P==0) {N/=P; printf("%d\n", P);}
                else{P++;}
        }

}

 

[23-04-09 수정]

이 글을 생각보다 많은 분들이 보고 계신 것 같아 이전 설명을 지우고 다시 작성해보려 합니다.

 

문제에서 요구하는 답이 소인수(Primefactor)이므로 위와 같이 루프를 이용하여 간단히 해결할 수 있습니다.

입력값이 천 만이기 때문에 시간 초과는 발생하지 않습니다.

 

위 풀이를 재귀 함수로 변환하면 다음과 같습니다.

 

#include <stdio.h>

int PrimeFactor(int a){
        int i=2;
        if(a==1){return NULL;}
        while(a%i!=0){i++;}
        printf("%d\n", i);
        PrimeFactor(a/i);
}

int main()
{
	int a;
	scanf("%d", &a);
        PrimeFactor(a);
        return 0;
}

 

소인수분해 문제는 4149번 문제가 특히 어려운데 이와 관련된 내용은 폴라드 포 알고리즘을 공부해보시면 좋을 것 같습니다.

반응형

'컴퓨터 > C, C++' 카테고리의 다른 글

[C/C++] 백준 4948번 C언어  (0) 2022.06.08
[C/C++] 백준 1929번 C언어  (0) 2022.06.08
[C/C++] 백준 2581번 C언어  (0) 2022.06.07
[C/C++] 백준 1978번 C언어  (0) 2022.06.07
[C/C++] 백준 10757번 C언어  (0) 2022.06.06

댓글