0
点赞
收藏
分享

微信扫一扫

判断2..100以内的质数--sqrt

一个判断2..100以内的质数算法引起的几点疑惑。
先看算法:

【使用while-1-plsql】
declare

v_i number(3) := 2;
v_j number(3) :=2;
v_flag number(1) := 1;

begin

while v_i <= 100 loop

while v_j <= sqrt(v_i) loop
if mod(v_i,v_j) = 0 then v_flag := 0;
end if;
v_j := v_j +1;

end loop;

if v_flag = 1 then dbms_output.put_line(v_i);
end if;

v_j := 2;
v_i := v_i+1;
v_flag := 1;

end loop;

end;
【使用while-2-python】
i = 2
while i < 100:
j = 2
while j <= (i/j):
if not(i%j): break
j += 1
if (j > i/j) : print(i, " 是素数")
i += 1
【使用for】

declare

v_flag number(1) := 1;

begin

for c in 2..100 loop
for d in 2..sqrt(c) loop
if mod(c,d) = 0 then v_flag := 0;

goto label;//跳到label标签处,相当于跳出循环

end if;
end loop;

<<label>>

if v_flag = 1
then dbms_output.put_line(c);
end if;

v_flag := 1;

end loop;

end;

说明一下内层循环为什么以sqrt(i)为分界点:

首先,约数是成对出现的。比如24,你找到个约数3,那么一定有个约数8,因为24/3=8。
然后,这对约数必须一个在根号n之前,一个在根号n之后。因为都在根号n之前的话,乘积一定小于n(根号nX根号n=n)。同样,都在根号n之后的话,乘积一定大于n。
所以,如果你在根号n之前都找不到约数的话,那么根号n之后就不会有了。


举报

相关推荐

0 条评论