지식 보관소
▣ 전문지식, 저작권 관련 자료들 중 일부만 공유하고 싶을때 사용할 수 있는 게시판 입니다.
▣ 정회원 이상만 다운로드가 가능하니 참고하시기 바랍니다.
작성일자 | 2010-06-24 |
---|---|
수정일자 |
소수란 from wikipedia
소수(素數, 발음: /소쑤/, 문화어: 씨수, 영어: prime number)는 약수가 1과 자기 자신 뿐인 1보다 큰 자연수로 정의된다. 정수론에서 매우 중요한 역할을 담당한다.현재에 와서는 암호 분야에서의 사용으로 그 중요성이 부각되고 있다.
우선 소수를 구하는 방법 중 가장 많이 사용되는 방법이 SQRT(root, 제곱근)를 이용하는 방법입니다.
C언어의 소수를 구하는 방법은 다음에 전문가에게 물어봐서 올리도록 하겠습니다. ^^;;
하지만 저는 SQRT를 이용해서 어떻게 구하는지 모르기 때문에;;; 그냥 단순 무식하게 구하였습니다.
가끔은 Simple is the best(무식한 방법이 최고다).
우선 ARENA Model입니다. 보기에는 상당히 복잡해 보이지만, 실제로 소수를 구별하는 로직은 상당히 간단합니다.
단지 위의 Logic은 Excel로 부터 값을 받아봐서 소수를 다시 출력하는 방법을 활용하도록 구성되어 있어서 복잡하게 보일 뿐입니다. ^^;
우선 엑셀에서 그림과 같이 구하고 싶은 숫자들을 입력합니다.
(연속적이든 비 연속적이든 상관없습니다. 다만 0보다 큰 값을 입력해주시기 바랍니다.)
이런 후 ARENA를 실행하면 아래와 같은 결과가 나옵니다.
우선 소수는 그 값을 그대로 다시 적도록 하였으며, 소수가 아닌 숫자들은 0으로 반환하도록 하였습니다.
그럼 몇몇 중요한 logic을 살펴보도록 할까요?
우선 ReadWrite에서 Excel Sheet에 입력된 값을 하나 읽어 옵니다. 읽어온 값을 ReadNumber라는 attribute로 지정하였습니다.
이렇게 읽어온 값은 CalculatedNumber == CalculatedNumber+1 이라는 변수를 활용하여 2~ ReadNumber까지 숫자를 늘여갑니다.
그리고 CheckNumber == ANINT(ReadNumber/CalculatedNumber)-(ReadNumber/CalculatedNumber)라는 구문을 통하여
ReadNumber가 CalculatedNumber로 나눴을 경우 나머지가 "0"인지 아닌지를 판단하도록 계산을 합니다.
이렇게 계산된 값은 총 3가지 case가 나오는데 각각의 경우는 아래와 같습니다.
Case#01: 사용자가 입력한 숫자보다 작은 숫자로 나누었을때 "0"이 아닌 경우 - 이 경우에는 CalculatedNumber를 사용자가 입력한 숫자까지 계속 증가 시켜서 나눠지는지를 판단해야 합니다. ARENA에서 사용된 Deicde 구문은 (ReadNumber<>CalculatedNumber)&&(CheckNumber<>0) 입니다.
Case#02: 사용자가 입력한 숫자보다 작은 숫자로 나누었을때 "0"이 되는 경우 - 이 경우는 소수가 아니므로 더 이상 계산을 할 필요가 없습니다.
이 경우를 판단하기 위해 사용된 구문은(ReadNumber<>CalculatedNumber)&&(CheckNumber==0) 입니다.
Case#03: 사용자가 입력한 숫자(ReadNumber) 와 CalculatedNumber 가 같을 경우 입니다. 이 경우는 ReadNumber 보다 작은 숫자로 나누기를 하였을 경우 "0"이 나오지 않으므로 소수가 되는 숫자가 됩니다. ARENA에는 Else로 표현 되었지만, 검증을 위해 ReadNumber==CalculatedNumber라는 구문을 추가해보는 것도 하나의 팁이 됩니다.
이러한 3가지의 경우를 사용자가 입력한 excel sheet의 마지막이 될 때 까지 계속 연속적으로 수행합니다.
후기
ARENA로 소수를 찾는 Model은 C, C++, JAVA 등 다른 원시 언어에 비해 상당한 시간이 걸리는 것은 부정을 할 수 없습니다. ^^;
검색엔진을 통해 검색을 해보니 1~100,000의 인련의 숫자를 찾는데 2초도 걸리지 않는 것을 ARENA로 하게되면 상당한 시간이 걸릴 것 같습니다.
그냥 ReadWrite 모듈 및 Variable의 사용방법에 대해 학습한다는 생각으로 만들어보시면 될 듯 합니다.
사용된 ARENA Model (운영자님이 다운을 받지 못하게 해놨네요.ㅡㅠ)