赞
踩
我们在日常判断素数的程序中常用到如下代码
- //判断数num是不是素数
- for(i=2;i<num;i++){
-
- if(num%i==0)
- return 0;
-
- return 1;
- }
这样写无疑是没有问题的,但是我们实际做题可能会有算法时间复杂度的要求,或者说数据大的时候我们会等很久,算法效率低,那么有没有一种好的算法可以更快地判断是不是素数呢?
当然了,先附上代码段
- //判断数num是不是素数
- for(i=2;i<=sqrt(num);i++){
-
- if(num%i==0)
- return 0;
-
- return 1;
- }
sqrt()函数是用来判断开根号的,那么我们这样用是为何呢?
比如想判断20是不是素数,我们都知道素数是除了1和数本身没有其他公约数的数,我们看,20可以分成如下公因子:
如果我们用老办法i=2到20一个一个判断是可以,但是没有必要
因为,我们可以使用sqrt来判断
- //判断数20是不是素数
- for(i=2;i<=sqrt(20);i++){
-
- if(num%i==0)
- return 0;
-
- return 1;
- }
我们看到sqrt(20)的值是4.47...
其实我们只需要判断前半段就行,因为有2肯定有10,有4肯定有5
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。