반응형
문제
정수 N이 주어졌을 때, 소인수분해하는 프로그램을 작성하시오.
입력
첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다.
출력
N의 소인수분해 결과를 한 줄에 하나씩 오름차순으로 출력한다. N이 1인 경우 아무것도 출력하지 않는다.
내 풀이)
#include <iostream>
using namespace std;
int main()
{
//
// 문제
// 1. 정수 n이 주어졌을때 소인수분해하는 프로그램 만들기
// 입력
// 1. 정수 n을 입력받는다.
int N = 0;
cin >> N;
// 처리
// 1. N이 양수일때 반복문을 돌려준다.
//1-1. cal을 반복문으로 늘려주면서 나눠질때
//1-1-1. N을 나눈값으로 가지게 하고 cal을 다시 초기화 해줌으로써 인수분해 될수있도록 처리한다.
int cal = 2;
while (N > 1)
{
if (N % cal == 0)
{
N = N / cal;
cout << cal << endl;
cal = 2;
}
else {
cal++;
}
}
// 2.
// 출력
//
return 0;
}
문제점 : 소인수 분해 할때 소인수 분해 하는 숫자는 같은 숫자로 소인수 분해 하면 값을 증가 시키지 않고 while문에서 처리할수 있으므로 더욱 간략히 소스를 구현할수있다.
//백준11653 소인수분해
#include <iostream>
using namespace std;
int main() {
int N;
cin >> N;
if (N == 1) return 0;
for (int i = 2; i <= N; i++) {
while (N % i == 0) {
cout << i << endl;
N /= i;
}
}
}
반응형
'알고리즘' 카테고리의 다른 글
[백준 알고리즘 c++] 문제 18. 베르트랑 공준 4948 (0) | 2022.09.02 |
---|---|
[백준 알고리즘 c++] 문제 17. 소수 구하기 에라토스테네스의 체 1929 (0) | 2022.09.02 |
[백준 알고리즘 c++] 문제 15. 소수 찾기2 2581 (0) | 2022.09.02 |
[백준 알고리즘 c++] 문제 14. 소수 찾기 1978 (0) | 2022.08.31 |
[백준 알고리즘 c++] 문제 13. 두수의 합(배열) 10757 (0) | 2022.08.31 |