leetcode 判断一个数是不是素数的标准算法
判断素数是常用的算法,
- 一般的算法都是从2循环到n-1
时间复杂度较高O(n)
明显存在效率低的问题。 - 另外一个就是循环到n/2
//判断素数
bool isSu(int a)
{
if(a<4)
return true;
for (int i = 3; i < a / 2; i++) //i< pow(a,0.5);
{
if(a%i==0)
return false;
}
return true;
}
- 有人分析:
对于每个数n,其实并不需要从2判断到n-1,
一个数若可以进行因数分解,那么分解时得到的两个数一定是一个小于等于sqrt(n),一个大于等于sqrt(n),据此
并不需要遍历到n-1,遍历到sqrt(n)即可,因为若sqrt(n)左侧找不到约数,那么右侧也一定找不到约数
bool isPrim(int n)
{
for(int i=2;i<=sqrt(n);i++)
{
if(n%i==0)
return false;
}
return true;
}