算法学习之素数

来源:互联网 发布:淘宝认证考试 编辑:程序博客网 时间:2024/04/30 17:21

判断是否是素数,素数又称为质数,是大于1且除了本身没有因数的自然数,如2,3,5,7,11等

算法1:

bool IsPrime(int n)

{

  int divisors,i;

  divisors = 0;

  for(int i=1;i<=n;i++)

 {

     if(n % i == 0) divisors++;

 } 

 return (divisors == 2);

}

如果测试的数字是100000,那么次算法遍历的次数就比较多,效率低下,这时候就需要考虑另外一种算法

分析:

步骤1,如果能被2整除肯定不是素数

步骤2,如果不能被2整除则判断是否能被3,5,7等整除

步骤3,考虑到被测试数n如果能被d1整除,那么假设n=d1*d2,如果d1=d2,那么d1=sqrt(n);如果d1大于sqrt(n),那么d2必然小于d1,所以遍历的最大上限数只需到sqrt(n)

步骤4,考虑到计算机sqrt(16)的结果要小于4,大概是3.99999999,所以sqrt(n)要加上1

算法2:

bool IsPrime(int n)

{

 int i,limit; 

 if(n<=1)return (FALSE);

 if(n==2) return (TRUE);

 if(n%2==0) return (FALSE);

 limit = sqrt(n)+1;

  for(i = 3;i<limit;i+2)

  {

    if(n%i==0) return (FALSE);

  }

 return (TRUE);


}


0 0
原创粉丝点击