메뉴 건너뛰기

SCM Lab

지식 보관소

   ▣ 전문지식, 저작권 관련 자료들 중 일부만 공유하고 싶을때 사용할 수 있는 게시판 입니다.
   ▣ 정회원 이상만 다운로드가 가능하니 참고하시기 바랍니다.

작성일자 2010-06-24 
수정일자  

소수란 from wikipedia

소수(素數, 발음: /소쑤/, 문화어: 씨수, 영어: prime number)는 약수가 1과 자기 자신 뿐인 1보다 큰 자연수로 정의된다. 정수론에서 매우 중요한 역할을 담당한다.현재에 와서는 암호 분야에서의 사용으로 그 중요성이 부각되고 있다.


우선 소수를 구하는 방법 중 가장 많이 사용되는 방법이 SQRT(root, 제곱근)를 이용하는 방법입니다.

C언어의 소수를 구하는 방법은 다음에 전문가에게 물어봐서 올리도록 하겠습니다. ^^;;

 

하지만 저는 SQRT를 이용해서 어떻게 구하는지 모르기 때문에;;; 그냥 단순 무식하게 구하였습니다.

가끔은 Simple is the best(무식한 방법이 최고다).

 

ARENA Model of Search Prime Number.jpg

 

우선 ARENA Model입니다. 보기에는 상당히 복잡해 보이지만, 실제로 소수를 구별하는 로직은 상당히 간단합니다.

단지 위의 Logic은 Excel로 부터 값을 받아봐서 소수를 다시 출력하는 방법을 활용하도록 구성되어 있어서 복잡하게 보일 뿐입니다. ^^;

 

Before_Running.jpg

 

우선 엑셀에서 그림과 같이 구하고 싶은 숫자들을 입력합니다.

(연속적이든 비 연속적이든 상관없습니다. 다만 0보다 큰 값을 입력해주시기 바랍니다.)

 

이런 후 ARENA를 실행하면 아래와 같은 결과가 나옵니다.

After_Running.jpg

 

우선 소수는 그 값을 그대로 다시 적도록 하였으며, 소수가 아닌 숫자들은 0으로 반환하도록 하였습니다.

 

그럼 몇몇 중요한 logic을 살펴보도록 할까요?

ReadWrite01.jpg

 

우선 ReadWrite에서 Excel Sheet에 입력된 값을 하나 읽어 옵니다. 읽어온 값을 ReadNumber라는 attribute로 지정하였습니다.

 

Assign01.jpg

 

이렇게 읽어온 값은 CalculatedNumber == CalculatedNumber+1 이라는 변수를 활용하여 2~ ReadNumber까지 숫자를 늘여갑니다.

그리고 CheckNumber == ANINT(ReadNumber/CalculatedNumber)-(ReadNumber/CalculatedNumber)라는 구문을 통하여

ReadNumber가 CalculatedNumber로 나눴을 경우 나머지가 "0"인지 아닌지를 판단하도록 계산을 합니다.

Decide01.jpg

 

이렇게 계산된 값은 총 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 (운영자님이 다운을 받지 못하게 해놨네요.ㅡㅠ)

PrimeNumber.xls

PrimeNumber.doe

번호 제목 글쓴이 작성일자 수정일자 조회 수
21 XE로 아이디/비밀번호 찾기 및 가입 인증메일 보내기 [2] SCM 2014-06-27    4539
20 QUEST Tutorial : User-defined statics print out a excel (csv) file [1] file SCM 2010-07-13    7871
19 QUEST Tutorial : Archive, Put Model and Save Model file SCM 2010-07-05    6368
18 Editors of QUEST SCL syntax highligher [1] file SCM 2010-06-30    7513
» ARENA Model : 소수(Prime Number) 계산 모델 만들기 file 원잇 2010-06-24    7359
16 QUEST Model : 작업 도중 다른 작업자 호출하기 [2] file SCM 2010-06-22  2010-06-23  6664
15 ARENA 예제 : 작업 도중 다른 작업자 호출하기 [1] file 원잇 2010-06-17    6357
14 대기행렬 시스템의 표기 (Description of Queueing) file SCM 2010-06-15    7245
13 시뮬레이션의 반복 횟수를 정하는 절차 file SCM 2010-06-15    6720
12 IGRIP To QUEST Conversion method #01 file SCM 2010-06-13    6427
11 JT Conversion (IGRIP to FactoryCAD) & Xref File file SCM 2010-06-08    8550
10 ARENA Traffic Signal 모델 중 신호등 다이어트 하기? [5] file 네오랑 2010-06-03    6955
9 QUEST Tutorial 02 - Modified location of Class, Connections file SCM 2010-05-27    6128
8 ARENA Traffic Signal 모델 중 신호등 만들기 file 네오랑 2010-05-26  2010-06-03  7973
7 QUEST Tutorial 02 - Basic Modeling - Machine, Sink, Save Module file SCM 2010-05-26    6641
6 QUEST Tutorial 02 - Basic Modeling - Part & Source Class file SCM 2010-05-25    5660
5 QUEST Tutorial 02 - Basic Modeling - A Bolt Factory Continue file SCM 2010-05-24    6282
4 QUEST Tutorial 02 - Basic Modeling - A Bolt Factory file SCM 2010-05-24    6089
3 QUEST Tutorial 01 - Introduction - Building Simulation & QUEST Model file SCM 2010-05-23    6553
2 QUEST Tutorial 01 - Introduction - Context & World Display Options file SCM 2010-05-23    5766