oracle如何判断素数,如何判断是素数

用 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怎么求1..1000之间的素数

Oracle是数据库,存储数据用的,应用逻辑最好放在数据库外面,虽然可以实现,但是并不提倡。

set serverout on

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;

primes(1) := 2;

primes.extend;

primes(2) := 3;

v_i := 5;

v_cnt := 2;

LOOP

EXIT WHEN v_i  1000;

flag := 1;

v_j  := 1;

LOOP

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

primes.extend;

v_cnt := v_cnt + 1;

primes(v_cnt) := v_i;

dbms_output.put_line(v_i);

END IF;

v_i := v_i + 2;

END LOOP;

END;

/

【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 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;

素数的判断方法

素数的判断方法如下:

1、定义判断法。根据定义所有素数都是大于1的自然数,那么小于等于1的数都没有素数的概念。数字2只有1和2两个因数,因而必定是素数,其他数字x只要判定从2到x-1都无法被它整除,就证明改数字是素数。

2、数据理论法。根据数论理论可以把数字分成6个大部分,6i,6i+1,6i+2,6i+3,6i+4,6i+5,也就是说数字x%6计算的值一定是0,1,2,3,4,5这6个数字,而6i,6i+2,6i+3,6i+4一定就是合数,它们都有除了1之外的因数,只有6i+1和6i+5可能是素数,因而一旦判定数字大于等于且6取模结果为0,2,3,4就可以判定不是素数。

3、筛选法,就是从2开始可以知道2的所有倍数都是合数,不是2的倍数可能是素数,第一个不是2的倍数的数一定是素数,也就是3,接着将3的倍数全部筛选掉,第一个不是2的倍数也不是3的倍数的数一定是素数也就是5,以此类推,最终筛选出某一范围内的所有素数。


名称栏目:oracle如何判断素数,如何判断是素数
文章位置:http://hbruida.cn/article/hedehd.html