找出1000以內所有的完數,即一個數等于,其不包含自身的因子之和
declare
i number;
j number;
sum number;
BEGIN
for i IN 1..1000
loop
sum:=0;
for j IN 1..i-1
loop
if mod(i,j)=0 then sum:=sum+j;
end if;
end loop;
if (i=sum)then dbms_output.putline(To_char(i));
end if;
end loop;
end;
希望能幫到剛開始學習的大家啦
uj5u.com熱心網友回復:
感謝分享。 最好也在博客中記錄一下。
uj5u.com熱心網友回復:
首先要感謝您的分享,但是本著一個共同學習,共同進步的原則,有2個問題,需要和您分享一下。
第一個,您的代碼在我的環境上,執行不了,有一些內容,需要修改,以下是修改后的內容。
DECLARE
i NUMBER;
j NUMBER;
n_sum NUMBER;
BEGIN
i := 0;
n_sum := 0;
FOR i IN 1..1000 LOOP
n_sum := 0;
FOR j IN 1..i - 1 LOOP
IF
MOD(i,j) = 0
THEN
SELECT
n_sum + j
INTO
n_sum
FROM
dual;
END IF;
END LOOP;
IF
i = n_sum
THEN
dbms_output.put_line(i);
END IF;
END LOOP;
END;
第二,代碼塊,只有在資料量很大,或者業務邏輯很復雜的情況下,才會用。程式員拼的是邏輯,而不是體力。這個問題,可以通過直接查詢獲取,不需要些代碼塊回圈。
時間有點倉促,沒有仔細看,應該還有優化的余地,供大家分享一下。
以下陳述句,可以查詢到10000以內的完數。
WITH
TAB1 AS (SELECT LEVEL L FROM DUAL CONNECT BY LEVEL <= 10000),
TAB2 AS (SELECT T1.L L1,T2.L L2 FROM TAB1 T1 JOIN TAB1 T2 ON MOD(T2.L,T1.L) = 0 AND T2.L > T1.L),
TAB3 AS (SELECT L2,SUM(L1) L1 FROM TAB2 GROUP BY L2)
SELECT L1 FROM TAB3 WHERE L2=L1 ORDER BY 1;
**桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......
我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......
關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......