判断是否是素数,素数又称为质数,是大于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);
}