如何用mysql求质数_PLSQL计算质数

这篇博客探讨了如何使用PLSQL高效地计算质数,通过逐步优化算法,将原本需要2小时的计算时间缩短至1秒以内。主要改进包括减少循环次数、利用质数特性、避免不必要的运算等。
摘要由CSDN通过智能技术生成

看到有人实现了一个计算质数的函数,就是效率有点差,贴一个以前写的计算质数的算法。

目标很简单,列出100以内的质数。

其实算法很简单,两个循环就搞定了。但是发现使用不同的算法,执行效率差别之大相当惊人,特别是数据量级很大的时候。

下面就是最常见的一种写法:(也是最差的一种)

[PHP]

SQL> SET SERVEROUT ON

SQL> DECLARE

2   V_FLAG BOOLEAN;

3  BEGIN

4   FOR I IN 2 .. 100 LOOP

5    V_FLAG := TRUE;

6    FOR J IN 2 .. I - 1 LOOP

7     IF  MOD(I,J) = 0 THEN

8      V_FLAG := FALSE;

9     END IF;

10    END LOOP;

11

12    IF V_FLAG = TRUE THEN

13     DBMS_OUTPUT.PUT_LINE(I);

14    END IF;

15   END LOOP;

16  END;

17  /

2

3

5

7

11

13

17

19

23

29

31

37

41

43

47

53

59

61

67

71

73

79

83

89

97

PL/SQL 过程已成功完成。

已用时间:  00: 00: 00.09

.

[/PHP]

由于屏幕输出操作比较慢,为了避免影响,将屏幕输出关闭。并将数据量增大到100000,以下所有的测试都在这个相同条件下进行。

[PHP]

SQL> DECLARE

2   V_FLAG BOOLEAN;

3  BEGIN

4   FOR I IN 2 .. 100000 LOOP

5    V_FLAG := TRUE;

6    FOR J IN 2 .. I - 1 LOOP

7     IF  MOD(I,J) = 0 THEN

8      V_FLAG := FALSE;

9     END IF;

10    END LOOP;

11

12    IF V_FLAG = TRUE THEN

13     --DBMS_OUTPUT.PUT_LINE(I);

14     NULL;

15    END IF;

16   END LOOP;

17  END;

18  /

PL/SQL 过程已成功完成。

已用时间:  02: 02: 58.73

.

[/PHP]

这种方法在100000数据量的用时居然达到了2个小时。

如果稍微仔细考虑一下,就会发现,系统做了很多没有必要的工作,首先判断是否能整除的时候不需要循环到I – 1,只要执行到I的平方根就可以了,而且,如果I可以被整除就不需要继续循环,可以马上跳出内层循环了。经过简单优化后:

[PH

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值