成都网站建设设计

将想法与焦点和您一起共享

oracle怎么求质数 质数是怎么求出来的

【oracle】定义一个Oracle存储过程,输出1~100之间的素数。

declare

创新互联公司专注于东阳网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供东阳营销型网站建设,东阳网站制作、东阳网页设计、东阳网站官网定制、小程序设计服务,打造东阳网络公司原创品牌,更为您提供东阳网站排名全网营销落地服务。

v_num number;

v_now number;

v_yes number;

c_max number;

begin

v_num:=1;

c_max:=200;--这里设置最大数,想要100这内就写100,想要1000之内就写1000

loop

v_now:=2;--这里设置每一个数的初始被除数,从2开始

v_yes:=1;--设置初始参考数,1为素数,0为非素数,默认初始为1

if v_num4 then

dbms_output.put_line(v_num);--1到3都是素数,这里就不再判断了

-- v_num:=v_num+1;--自增1

end if;

if v_num=4 then

--这里开始判断,只能被1和本身整除的数,就是素数

loop

if mod(v_num,v_now)=0 and v_numv_now then --如果有能被整除的数,且被除数不是除数本身,就不是素数

v_yes:=0;

end if;

v_now:=v_now+1;--被除数递增

exit when v_now=v_num;--当被除数大于除数时退出

end loop;--因为要一个一个的判断,所以要来一次循环

end if;

if v_num4 and v_yes=1 then

dbms_output.put_line(v_num);

-- v_num:=v_num+1;--自增

end if;

v_num:=v_num+1;--自增

exit when v_num=c_max;

end loop;

end;

参考一下,自己写的

oracle 函数问题,sqrt,mod 怎么用啊?

这2个函数是你说的意思没错,你是不理解为什么这么用吗?

我觉得这个函数和我理解的有点不一样。

for v_j in 2 ..sqrt(v_u) loop;应该是for v_j in 2 ..sqrt(v_i) loop;

v_u 应该是函数接收的一个参数,你说100它就给你前100内的素数,外层那个循环也应该是以v_u为上限的。

这个函数结构很简单,外层以2~100循环,很明显就是循环每个数字,内层就是用来检测v_i这个数字是不是素数。

内层循环就是由2~sqrt(v_i)逐个和v_i去mod,如果能整除,说明这个v_i不是素数,因为找到一个数能整除,然后把标志位v_flag置为0,内层循环完了,后面if v_flag = 1 then dbms_output.put_line(v_i);就是如果这个标志位还是1,没变化过,说明没找到过能整除v_i的数,也就是说这个数是素数。

至于内层循环循环为什么只要2~sqrt(v_i)就够了,这是个数学问题,我答不上来,反正就是这样,这个范围是严谨的,而且对于这种验证方法,平方根要省很多时间,我们验证97的时候肯定不用循环到96,也不用循环到一半,sqrt就够了。

Oracle中怎样使用pl/sql计算出1--100以内的素数啊

--创建中间表

create table t_1 (

num number(6));

--1--100数据写到中间表

begin

for r1 in 1..100 loop

insert into t_1 (num) values (r1);

commit ;

end loop ;

end ;

--结果

select *

from t_1 t

where not exists (select *

from t_1 a, t_1 b

where a.num * b.num = t.num

and a.num 1

and b.num 1)

order by 1 ;

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

本过程输入参数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)

oracle for循环求1到100之间的素数

declare

/*思路:素数是只能被1和它本身整除的数,针对一个数n,从2到n-1对其求模,如果能整除就不是素数*/

v_result number; /*是否为素数,1为素数,0为非素数*/

j number; /*从2到i-1取模,如果能被整除就不是素数*/

begin

for i in 1 .. 100 loop

j := 2;

v_result := 1;

loop

if mod(i, j) = 0 and i j then

v_result := 0;

end if;

j := j + 1;

exit when j = i;

end loop;

if v_result = 1 then

dbms_output.put_line(i);

end if;

end loop;

end;


新闻标题:oracle怎么求质数 质数是怎么求出来的
链接地址:http://chengdu.cdxwcx.cn/article/hghcoj.html