WITH t1 AS (
SELECT REPLACE(SYS_CONNECT_BY_PATH(n,'/'),'/') s
FROM (SELECT LEVEL-1 n FROM DUAL CONNECT BY LEVEL<=10)
WHERE LEVEL=10 START WITH n>0 CONNECT BY NOCYCLE LEVEL<=10 AND n<>PRIOR n
),
t2 as (select TO_NUMBER(SUBSTR(s,1,1)) a, TO_NUMBER(SUBSTR(s,2,2)) b, TO_NUMBER(SUBSTR(s,4,3)) c, TO_NUMBER(SUBSTR(s,7)) d, s
from t1 where '0' in (SUBSTR(s,5,1), SUBSTR(s,8,1), SUBSTR(s,9,1))
--instr(SUBSTR(s,5,1)||SUBSTR(s,8,2),'0')>0
),
t as (select a,b,c,d,s from t2)
SELECT a||'*'||b||'*'||c||'*'||d||'='||p
FROM (
SELECT * FROM (
SELECT a,b,c,d,s,TO_CHAR(a*b*c*d) p
FROM t where 0 not in (mod(a*b,10),mod(a*c,10),mod(a*d,10),
mod(c*b,10),mod(d*b,10),mod(c*d,10))
)
WHERE p=REVERSE(p)
ORDER BY TO_NUMBER(p) DESC
)
WHERE ROWNUM=1;
时间上几乎没改善 |