분류 | 게시판 |
베스트 |
|
유머 |
|
이야기 |
|
이슈 |
|
생활 |
|
취미 |
|
학술 |
|
방송연예 |
|
방송프로그램 |
|
디지털 |
|
스포츠 |
|
야구팀 |
|
게임1 |
|
게임2 |
|
기타 |
|
운영 |
|
임시게시판 |
|
int is_prime(int n) /* return value -1 : invalid input range 0 : not prime number 1 : prime number */ { static int prime_number[] = {0, 0,1,1,0,1,0,1,0,0,0, 1,0,1,0,0,0,1,0,1,0, 0,0,1,0,0,0,0,0,1,0, 1}; if ((n<0) || (n>31) return -1; return prime_number[n]; } |
1) 65536 크기를 가지는 배열 prime_number[] 을 만든다. 2) 1 ~ 65536 까지 고전적인 방법인 '에라토스테네스의 체'를 이용해서 소수를 모두 구하여, 소수이면 1 아니면 0 을 채운다. 3) 이 배열에서 소수가 몇개인지 세어, 소수 배열 prime_sequence[] 을 만든다. (주1 : 655개) 4) 위의 65K 배열에서 하나씩 찾아서 소수 배열 prime_sequence[] 에 집어 넣는다. (주2 : 결과적으로 int prime_sequence[] = { 2, 3, 5, 7, 11, 13, 17, ...} 이란 배열을 만드는 것) 5) 만약 입력 값이 65536 보다 작으면, 배열 prime_number[] 을 이용해서 바로 답을 내준다. 6) 만약 입력 값이 65536 보다 크고 42억보다 작으면, prime_sequence[] 을 이용해서 655번 나눠보면 소수 판정이 가능하다. (주3: 사실 이 범위의 대부분은 합성수이기 때문에, 2, 3, 5 ,7, 11, 13, 17 로 정도로 나눠보는 것만으로도 99%의 수는 합성수로 판별 가능함.) |
죄송합니다. 댓글 작성은 회원만 가능합니다.