用PL/SQL查找1-1000之间的素数
1.由于需要打印所以要扩充打印的缓冲,以下有两种方式:
exec dbms_output.enable(缓存大小);
set serveroutput on size 缓存大小;
2.第一次,采取了自顶向下的分析方法:
declare
reg number(4);
num number(4);
i number(4);
begin
for num in 1..10000
loop
reg:=0;
for i in 1..(num)
loop
if(num mod i = 0)then
reg:=reg+1;
end if;
end loop;
if(reg = 2) then
dbms_output.put_line(num);
end if;
end loop;
end;
第二次,采取折半查找方法,应为自然数一般最大的公约数为其一半:
declare
reg number(4);
num number(4);
i number(4);
begin
for num in 1..1000
loop
reg:=1;
for i in 1..(num)/2
loop
if(num mod i = 0) then
reg:=reg+1;
end if;
end loop;
if(reg = 2) and (num!=1) then
dbms_output.put_line(num);
end if;
end loop;
end;
第三次,在折半查找法的基础上,添加判断条件,即如果除了1和自身以外还有别的数能整除,就推出循环。
declare
reg number(4);
num number(4);
i number(4);
begin
for num in 1..1000
loop
reg:=1;
for i in 1..(num)/2
loop
if(num mod i = 0) then
reg:=reg+1;
if(reg=3)then
exit;
end if;
end if;
end loop;
if(reg = 2) and (num!=1) then
dbms_output.put_line(num);
end if;
end loop;
end;
3.总结
刚开始做的时候很郁闷,首先是oracle语句很久都没有练习了早以忘记,然后就是对于算法上的改进似乎比较慢,以前没有体会到算法可以提升程序的性能,今天算是领教了。第一个程序所需的时间为3秒左右,第二个需要1.6左右,第三个需要0.25秒左右。其次,如果能够用异步算法返回打印的效果可能更好,因为边算边打印从感觉上给用户带来快速的感觉,经管是障眼法。
exec dbms_output.enable(缓存大小);
set serveroutput on size 缓存大小;
2.第一次,采取了自顶向下的分析方法:
declare
reg number(4);
num number(4);
i number(4);
begin
for num in 1..10000
loop
reg:=0;
for i in 1..(num)
loop
if(num mod i = 0)then
reg:=reg+1;
end if;
end loop;
if(reg = 2) then
dbms_output.put_line(num);
end if;
end loop;
end;
第二次,采取折半查找方法,应为自然数一般最大的公约数为其一半:
declare
reg number(4);
num number(4);
i number(4);
begin
for num in 1..1000
loop
reg:=1;
for i in 1..(num)/2
loop
if(num mod i = 0) then
reg:=reg+1;
end if;
end loop;
if(reg = 2) and (num!=1) then
dbms_output.put_line(num);
end if;
end loop;
end;
第三次,在折半查找法的基础上,添加判断条件,即如果除了1和自身以外还有别的数能整除,就推出循环。
declare
reg number(4);
num number(4);
i number(4);
begin
for num in 1..1000
loop
reg:=1;
for i in 1..(num)/2
loop
if(num mod i = 0) then
reg:=reg+1;
if(reg=3)then
exit;
end if;
end if;
end loop;
if(reg = 2) and (num!=1) then
dbms_output.put_line(num);
end if;
end loop;
end;
3.总结
刚开始做的时候很郁闷,首先是oracle语句很久都没有练习了早以忘记,然后就是对于算法上的改进似乎比较慢,以前没有体会到算法可以提升程序的性能,今天算是领教了。第一个程序所需的时间为3秒左右,第二个需要1.6左右,第三个需要0.25秒左右。其次,如果能够用异步算法返回打印的效果可能更好,因为边算边打印从感觉上给用户带来快速的感觉,经管是障眼法。