메뉴 건너뛰기

tnt_db

Oracle 소수(prime number) 구하기

박상현 2006.06.13 20:25 조회 수 : 3425 추천:9

http://www.soqool.com/servlet/board?cmd=view&cat=100&subcat=1010&seq=79&page=1&position=1글쓴이 : 김홍선


변수 :n 이 주어졌을때,
:n 보다 작거나 같은 소수(prime number)를 구해보자.
쿼리는 아래와 같다.

SELECT level# prime
  FROM (SELECT     LEVEL level#
              FROM DUAL
             WHERE LEVEL > 1
        CONNECT BY LEVEL <= :n)
WHERE NOT EXISTS (SELECT     1
                         FROM DUAL
                        WHERE MOD (level#, LEVEL) = 0 AND LEVEL > 1
                   CONNECT BY LEVEL <= level# / 2)


그리고 아래는 크기순으로 처음 :n개의 소수를 구하는 쿼리다.
POWER (10, 125) 함수 때문에 쿼리가 뭔가 애써 끼워 맞춘듯한 느낌을 준다.
더 compact한 쿼리는 없을까?

SELECT level# prime
  FROM (SELECT     LEVEL level#
              FROM DUAL
             WHERE LEVEL > 1
        CONNECT BY LEVEL <= POWER (10, 125))
WHERE NOT EXISTS (SELECT     1
                         FROM DUAL
                        WHERE MOD (level#, LEVEL) = 0 AND LEVEL > 1
                   CONNECT BY LEVEL <= level# / 2) AND ROWNUM <= :n  


위로