一、思路:首先需要知道素数的概念即质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。
中心思想是,外循环所有的自然数,内循环折半查询,增加代码的速度,注意:从1开始,需要大于1,但是plsql中的循环是包括两端的值的,所以初始值应该从2开始。
二、具体实现
1 -- 在控制台输出1到100以内的素数。 2 3 declare 4 -- 声明一个boolean类型的变量,用作判断输出 5 v_z boolean; 6 begin 7 -- 循环100以内的数字 8 for i in 2..100 loop 9 -- 满足条件即为true 10 v_z:=true; 11 -- 内循环,如果自然数不为素数,则不能被被2正常,直接就不走内循环, 12 -- 如果不是素数,则继续走内循环,将v_z赋值为false,为后边的输出做判断 13 for j in 2..trunc(i/2) loop 14 -- 内循环中的算法是折半查询,例如:18不是素数,则18能被2整除,也就得到了18最大的因数为9,依次类推,提高了算法的效率。 15 if(mod(i,j)=0) then 16 v_z:=false; 17 18 end if; 19 20 end loop; 21 -- 最后输出判断,如果v_z为true,则该自然数为素数,则输出。 22 if v_z then 23 dbms_output.put_line(i); 24 end if; 25 26 end loop; 27 end;