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

简介: 判断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之后就不会有了。
目录
相关文章
|
4月前
整数的阶乘(英语:factorial)是所有小于及等于
整数的阶乘(英语:factorial)是所有小于及等于
|
3月前
判断一个素数能被几个9整除
判断一个素数能被几个9整除。
32 1
|
4月前
分解质因数答疑 为什么只需要枚举到根号N 为什么n % i == 0就是质数
分解质因数答疑 为什么只需要枚举到根号N 为什么n % i == 0就是质数
30 0
|
9月前
判断10-105之间有多少个素数,并输出所有素数。【素数又称为质数,定义为在大于1的 自然数中,除了1和它本身以外不再有其他因数的数
判断10-105之间有多少个素数,并输出所有素数。【素数又称为质数,定义为在大于1的 自然数中,除了1和它本身以外不再有其他因数的数
49 0
|
10月前
1195:判断整除
1195:判断整除
125 0
|
11月前
判断是否是质数
判断是否是质数
41 0
输出100以内的素数(质数)
输出100以内的素数(质数)
107 0
09:判断能否被3,5,7整除
09:判断能否被3,5,7整除
298 0
打印出100-200之间素数及总个数(用math函数)
打印出100-200之间素数及总个数(用math函数)
93 0
打印出100-200之间素数及总个数(用math函数)