안녕하세요. 정보처리기사 실기 2017년도 책 알고리즘부분 189쪽 질문드립니다.
소인수분해는 어떤 수 x를 2~x의 제곱근까지 나누면서
나누어 떨어지면 그 수를 소인수로 저장하고 몫을 x로 두고 다시 2부터 x의제곱근으로 나누는 과정을 반복하면서
제수가 x의제곱근보다 커지면 x자체가 소인수가 되고,
x와 마지막으로 구한 소인수가 같을 경우 종료되는 알고리즘으로 책에 나와있는데요.
189쪽 순서도와 190쪽 소스코드에서는
소인수를 구한 뒤 B=mok 과정 이후에 d를 초기화하지 않고 사용하고 있는데
b가 몫으로 다시 설정되면 나누는 수인 d를 2로 초기화해야하는게 맞지않나 싶어 문의드립니다.
위 과정대로라면 16번 빈칸에서 화살표는 d=2 위로 가고
소스코드에선 d=2부분이 5번라인 위에 와야되지 않나 싶어서요!
답변 부탁드립니다.
안녕하세요.
D를 2로 초기에 B 값을 나눴을 때 나머지가 0인 경우는 짝수인 경우인데,
2로 나눠진 짝수는 이후 홀수의 몫을 갖게 됩니다.
그러므로 이 값을 다시 2부터 나눠도 나머지는 0이 아니므로 무조건 D는 +1이 되게 됩니다.
이러한 과정이 진행되므로 B를 2로 초기화하는 과정을 처음에 한 번만 수행해도 결과가 동일합니다.
하지만 교재의 알고리즘의 이해에서 언급한 소인수 분해 과정에 맞게 순서도를 연계하려면
질문 주신것처럼 D를 2로 초기화하는 과정이 반복문 안쪽으로 들어가는 것이 맞습니다.
오늘도 즐거운 하루 되세요.
-
*2018-06-21 09:11:08
안녕하세요.
D를 2로 초기에 B 값을 나눴을 때 나머지가 0인 경우는 짝수인 경우인데,
2로 나눠진 짝수는 이후 홀수의 몫을 갖게 됩니다.
그러므로 이 값을 다시 2부터 나눠도 나머지는 0이 아니므로 무조건 D는 +1이 되게 됩니다.
이러한 과정이 진행되므로 B를 2로 초기화하는 과정을 처음에 한 번만 수행해도 결과가 동일합니다.
하지만 교재의 알고리즘의 이해에서 언급한 소인수 분해 과정에 맞게 순서도를 연계하려면
질문 주신것처럼 D를 2로 초기화하는 과정이 반복문 안쪽으로 들어가는 것이 맞습니다.
오늘도 즐거운 하루 되세요.