用 oracle中PL/SQL算法 求100内的素数

需要用....loop .... 等多重循环语句 跪求个算法+输出结果啊

本过程输入参数inp,计算1到inp之间的素数

算法:
拿出1-inp之间的每个数i,用2到i的平方根之间的每个数去除,全部除不尽的即为素数,有一个能除尽的为非素数

set serverout on
create or replace procedure is_prime(inp number)
as
i number;
j number;
is_prim boolean;
begin
dbms_output.new_line;
dbms_output.put(to_char(2)||' ');
for i in 3..inp loop
begin
is_prim:=true;
for j in 2..trunc(sqrt(i)) loop
if mod(i,j)=0 then
begin
is_prim:=false;
exit;
end;
end if;
end loop;
if is_prim then dbms_output.put(to_char(i)||' '); end if;
end;
end loop;
dbms_output.new_line;
end;
/

exec is_prime(100)
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-03-13
DECLARE
TYPE T_RECORD IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
V_RESULT T_RECORD;
I NUMBER DEFAULT 3;
N NUMBER DEFAULT 0;
BEGIN
--DBMS_OUTPUT.PUT_LINE(2);
V_RESULT(1) := 3;
WHILE (I < 100) LOOP
FOR J IN 1 .. V_RESULT.COUNT LOOP
IF V_RESULT(J) * V_RESULT(J) > I THEN
--DBMS_OUTPUT.PUT_LINE(I);
V_RESULT(V_RESULT.COUNT + 1) := I;
EXIT;
END IF;
IF TRUNC(I / V_RESULT(J)) = I / V_RESULT(J) THEN
EXIT;
END IF;
END LOOP;
IF N = 2 THEN
I := I + 4;
N := 1;
ELSE
I := I + 2;
N := N + 1;
END IF;
END LOOP;
V_RESULT(0) := 2;
END;

--参考:http://www.itpub.net/thread-922955-1-1.html
第2个回答  2013-10-26
相似回答