用while循环遍历100以内所有素数
思路
由质数的定义,1和该数本身必不是质数。
故从 i = 2 开始依次 i++ 到100遍历,
再设 初值 j = 2作为除数,我们将从2开始,j++到当前数本身,对当前数作取余运算。
即 i % j ,若取余为0,直接将 j 值重置为0,退出循环,当前数 i++;若取余不为0,则将 除数j++ ,再用当前数 i % j 判断取余是否为 0 ,重复以上步骤,直至当前除数 j++ 后>(当前数i-1)时退出循环,此时只需判断 j 不为0,当前数才为质数。
PL/SQL语句
declare
i number :=2; -- 初值
j number; -- 除数
begin
while( i <= 100 ) loop -- 循环遍历2~100所有值
j := 2; -- 对每个数从除数为2开始取余
loop
if mod( i , j ) = 0 then -- 求模运算
j := 0; -- 若能整除将除数置为0,目的方便最后判断输出质数
exit; -- 退出当前循环
end if;
j := j + 1; -- 若取余不为0,则除数++,继续取余运算
exit when j > i - 1; -- 退出条件为除数>当前数-1,表示除数已遍历到当前数
end loop;
if j <> 0 then -- 如果除数未被置0则当前数必为质数
dbms_output.put_line(':' || i);
end if;
i := i + 1; -- 当前数++
end loop;
end;
用for循环遍历100以内所有素数
思路
同上,新增语法结构
for 假名 in 下限..上限 loop
-- context
end loop;
PL/SQL语句
declare
i number :=2; -- 初值
j number; -- 除数
begin
for res1 in 2..100 loop
j := 2;
loop
if mod(i , j) = 0 then
j := 0;
exit;
end if;
j := j+1;
exit when j > i-1;
end loop;
if j <>0 then
Dbms_Output.Put_Line(i);
end if;
i := i+1;
end loop;
end;