本过程输入参数inp,计算1到inp之间的素数
算法:
set serverout on
create or replace procedure is_prime(inp number)
as
i number;
j number;
is_prim boolean;
begin
dbms_output.new_line;
is_prim:=true;
if mod(i,j)=0 then
is_prim:=false;
exit;
end;
end if;
end loop;
if is_prim then dbms_output.put(to_char(i)||' '); end if;
/
exec is_prime(100)
Oracle是数据库,存储数据用的,应用逻辑最好放在数据库外面,虽然可以实现,但是并不提倡.
DECLARE
v_i?NUMBER;
v_j?NUMBER;
v_cnt?NUMBER;
TYPE?type_array?IS?TABLE?OF?NUMBER;
primes?type_array;
flag?NUMBER;
BEGIN
primes?:=?type_array();
primes.extend;
LOOP
EXIT?WHEN?v_i?1000;
flag?:=?1;
v_j?:=?1;
EXIT?WHEN?primes(v_j)?*?primes(v_j)?v_i;
IF?MOD(v_i,?primes(v_j))?=?0?THEN
flag?:=?0;
EXIT;
END?IF;
v_j?:=?v_j?+?1;
END?LOOP;
IF?flag?=?1?THEN
v_cnt?:=?v_cnt?+?1;
primes(v_cnt)?:=?v_i;
dbms_output.put_line(v_i);
END;
declare
v_num number;
v_now number;
v_yes number;
c_max number;
v_num:=1;
loop
v_yes:=1;--设置初始参考数,1为素数,0为非素数,默认初始为1
-- v_num:=v_num+1;--自增1
--这里开始判断,只能被1和本身整除的数,就是素数
if mod(v_num,v_now)=0 and v_numv_now then --如果有能被整除的数,且被除数不是除数本身,就不是素数
v_yes:=0;
v_now:=v_now+1;--被除数递增
exit when v_now=v_num;--当被除数大于除数时退出
end loop;--因为要一个一个的判断,所以要来一次循环
dbms_output.put_line(v_num);
-- v_num:=v_num+1;--自增
v_num:=v_num+1;--自增
exit when v_num=c_max;
参考一下,自己写的
v_result number; /*是否为素数,1为素数,0为非素数*/
for i in 1 .. 100 loop
v_result := 1;
if mod(i, j) = 0 and i j then
v_result := 0;
j := j + 1;
exit when j = i;
if v_result = 1 then
dbms_output.put_line(i);
素数的判断方法如下:
以上就是土嘎嘎小编为大家整理的oracle如何判断素数相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!