【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 怎么用?。?/h2>这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 for循环求1到100之间的素数declare
/*思路:素数是只能被1和它本身整除oracle怎么求质数的数,针对一个数noracle怎么求质数,从2到n-1对其求模oracle怎么求质数,如果能整除就不是素数*/
v_result number; /*是否为素数,1为素数,0为非素数*/
jnumber; /*从2到i-1取模,如果能被整除就不是素数*/
【oracle怎么求质数 oracle计算数量】begin
for i in 1 .. 100 loop
j:= 2;
v_result := 1;
loop
if mod(i, j) = 0 and ij then
v_result := 0;
end if;
j := j1;
exit when j = i;
end loop;
if v_result = 1 then
dbms_output.put_line(i);
end if;
end loop;
end;
用 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怎么求质数的介绍就聊到这里吧 , 感谢你花时间阅读本站内容,更多关于oracle计算数量、oracle怎么求质数的信息别忘了在本站进行查找喔 。
推荐阅读
- java代码代码延时执行,java 延时队列怎么实现
- 包含sap乳房的词条
- 联想主机怎么进入u盘系统,联想主机进入bios设置u盘启动
- java代码逆序数组 java 数组逆序
- 发视频怎么添加小程序小蓝条,短视频发布时候添加小程序赚钱的方法 自媒体日收几千
- psp有哪些飞行游戏,psp飞行射击
- java代码为什么有横线 java代码下面有波浪红线
- 免费网页生成ios软件,网页生成app软件工具
- 动作节奏游戏,动作节奏游戏叫什么