Select que retorna os Números Primos
11/10/2007
Esse post vai mais a título de curiosidade. Sabemos que os números primos são números naturais que podem ser divididos apenas por dois números naturais, o 1 (um) e ele mesmo. Pois a tempos que eu queria um SQL que retornasse esses números!
Após um pouco de tentativas, saiu o SQL abaixo:
select z.zz PRIMOS
from
(select rownum+1 zz
from user_tables
where rownum < 100
) z
where zz not in (
select y.bb
from (select rownum+1 aa from user_tables a where rownum < 100) x
, (select rownum+1 bb from user_tables b where rownum < 100) y
where bb<>aa
and mod(bb, aa)=0
and aa<=bb
)
/
Abaixo, colocaremos uma amostra dos resultados:
SQL> select z.zz PRIMOS
2 from
3 (select rownum+1 zz
4 from user_tables
5 where rownum < 100
6 ) z
7 where zz not in (
8 select y.bb
9 from (select rownum+1 aa from user_tables a where rownum < 100) x
10 , (select rownum+1 bb from user_tables b where rownum < 100) y
11 where bb<>aa
12 and mod(bb, aa)=0
13 and aa<=bb
14 )
15 /
PRIMOS
---------
2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97
25 rows selected.
SQL>
Talvez essa não seja a melhor forma de fazer isso (obviamente, que usar SQL pra calcular isso não é a melhor saída). Mesmo assim, fica como um "desafio vencido".
Comentários aqui
Tags: Curiosidade, Matemática, SQL
