Page 80 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 80

b  5가 소수인지 판단하는 과정

                   prime[1]에 저장한 3으로 나눗셈을 실행합니다. 3으로 나누어떨어지지 않기 때문에 n의 값
                   5를 prime[2]에 저장합니다.
                      모든         의 값으로 나누어떨어지지 않고   안쪽 for문이 끝까지 실행되면 for문 종료 시 i의 값은 ptr과 일치합니다. 즉,
                   i와 ptr의 값이 같으면 소수입니다( 2 ).

                    c  7이 소수인지 판단하는 과정

                   prime[1]에 저장한 3과 prime[2]에 저장한 5로 나눗셈을 실행합니다. 소수라고 판단되므로
                   n의 값 7을 prime[3]에 저장합니다.


                    d  9가 소수인지 판단하는 과정

                   prime[1]에 저장한 3으로 나눗셈을 실행합니다. 3으로 나누어떨어지므로 소수가 아닌 합성
                   수라고 판단합니다.
                             의 값으로 나누어떨어져 안쪽의 for문이 중단되면 for문 종료 시 i의 값은 ptr보다 작습니다. 즉, i의 값이 ptr보다
                   작으면 합성수입니다.

                   이렇게 알고리즘을 수정하면 나눗셈을 수행하는 횟수가 78,022회에서 14,622회로 감소합

                   니다. 두 프로그램을 비교하면 다음과 같은 결론을 내릴 수 있습니다.


                     1. 같은 답을 얻는 알고리즘은 하나가 아니다.
                     2. 빠른 알고리즘은 메모리를 많이 요구한다.



                   알고리즘 개선(2)
                   100의 약수를 그림으로 나타내면 아래의 그림 2-16과 같습니다(단, 1 × 100은 제외합니다).


                    50

                                                        ①   2×50
                    40
                                                        ②   4×25
                                                                     이 범위의 나눗셈만
                                                        ③   5×20
                    30                                               수행하면 됩니다.
                                       대칭               ④ 10×10
                                                        ⑤ 20×  5
                    20
                                                        ⑥ 25×  4
                                                        ⑦ 50×  2
                    10


                     0
                       0    10   20    30    40   50
                                          [그림 2-16] 100의 약수의 대칭성

                   80   C 알고리즘
   75   76   77   78   79   80   81   82   83   84   85