This query will quickly find the prime factorization of a number -- Enter it on the first line and execute. This really would have been helpful in 7th grade math class!
Example: 18 = 2 x 3 x 3 Try some big, interesting numbers: 1234567890, 1212121212121, 9898989898989, 7171717171717
WITH step_0 as ( select /*==>*/ 1234567890 /*<==*/ as n from dual ) , step_1 as ( select n, level i from step_0 connect by rownum <= sqrt(n) ) , step_2 as ( select n, i, n/i as j from step_1 where mod(n,i) = 0 ) , step_3 as ( select n, i from step_2 UNION select n, j from step_2 ) , step_4 as ( select n, i , ( select min(i) from step_3 x where x.i/w.i = trunc(x.i/w.i) and x.i > w.i ) as idx from step_3 w ) select max(n)||' = ' || max(ltrim(rtrim(sys_connect_by_path(idx/i,'*'),'*'),'*')) as "Result" from step_4 connect by i = prior idx start with i = 1 ;
Note: this code is not the product of my brain-steam. I found this algorithm somewhere on the web and have enjoyed playing with it. I apologize for not remembering where or who originally came up with it.
No comments:
Post a Comment