判断一个数是否为质数方法
一.常规方法
最简单的方法就是从2开始遍历到n(当前数),判断是否是质数:
代码如下:
bool isprime(int x)
{//特例if(x==1)return false;if(x==2) return true;for(int i=2;i<x;i++){if(x%i==0)return false;}return true;
}
该方法时间复杂度为O(N^2)
优化:
我们知道如果存在一个数由两个不是1和其本身的因数,一定一个小于sqrt(n),一个大于sqrt(n)
代码如下:
bool isprime(int x)
{//特例if(x==1)return false;if(x==2)return true;int q=sqrt(x);for(int i=2;i<=q;i++){if(x%i==0)return false;}return true;
}
二.特殊方法
一个数是质数,一定满足该数在大于2和3的情况下,x%6==1&&x%6==5(总结得出),根据该规则,可以写出下面代码:
bool isprime(int x)
{if(x==1)return false;if(x==2||x==3)return true;if(x%6!=1&&x%6!=5)//得出6的倍数的两侧的数可能为质数,其他不可能return false;int q=sqrt(x);for(int i=5;i<=q;i+=6){if(x%i==0||x%(i+2)==0)//在6倍数两侧判断是否可以被除尽return false;}return true;
}
上面是关于质数的一点新方法,感谢你的阅读!!!