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

来源:互联网 发布:王奕霏编程 编辑:程序博客网 时间:2024/05/22 02:22

一个判断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 = 2while 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 0
原创粉丝点击