/*思路:素数是只能被1和它本身整除的数,针对一个数n,从2到n-1对其求模,宴虚如果能整除就不是素数清并*/
v_result number/*是否为素数,1为素数,0为非素数*/
jnumber/答祥迹*从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
本过程输入参数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)
declarev_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_num<4 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_num<>v_now then --如果有能被整除的数,且被除数不是除数本身,就不是素数搜森槐
v_yes:=0
end if
v_now:=v_now+1--被除数递增
exit when v_now>=v_num--当被除数大于除数时退出
end loop--因为要一个一个的判断,所以要来一次循环
end if
if v_num>4 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
参考一下,自己写的
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)