|
1-20公倍数:递归就是好就是好!
WITH n AS (
SELECT LEVEL n FROM DUAL WHERE LEVEL>1 CONNECT BY LEVEL<=20
)
,p AS (SELECT * FROM n
MINUS
SELECT n1.n * n2.n
FROM n n1, n n2
WHERE n1.n <= n2.n
)
,t(n,p,n_left,path) AS (
SELECT n.n,p.n,n.n/p.n,'/'||TO_CHAR(p.n) FROM n,p WHERE MOD(n.n,p.n)=0
UNION ALL
SELECT t.n,p.n,t.n_left/p.n,t.path||'/'||TO_CHAR(p.n)
FROM t,p
WHERE t.n_left>1 AND MOD(t.n_left,p.n)=0 AND t.p<=p.n
)
,t2 AS (
SELECT t.*
FROM t,(SELECT * FROM t WHERE n_left=1) t1
WHERE t1.path||'/' LIKE t.path||'/%' AND t.n=t1.n
)
SELECT EXP(SUM(LN(POWER(p,MAX(cnt)))))
FROM (SELECT p,COUNT(*) cnt
FROM t2
GROUP BY n,p
)
GROUP BY p;
232792560
MODEL留给OO去做,他最近进步很大。 |
|