判断一个数是否是素/质数
Posted 一无所知小白龙
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了判断一个数是否是素/质数相关的知识,希望对你有一定的参考价值。
垃圾版本 对从2到n-1取模,不为0则是素数,O(N)
bool judge(ll n)
{
if(n==2||n==3) return true;
for(int i=2;i<n;i++)
if(n%i==0) return false;
return true;
}
普通版本 对从2到sqrt(n)取模,不为0则是素数, O(logN)
bool judge(ll n)
{
if(n==2||n==3) return true;
for(int i=2;i<=sqrt(n);i++)
if(n%i==0) return false;
return true;
}
高配版本 先对2取模,然后开始对3到sqrt(n)的奇数取模 ,O(0.5*logN)
bool judge(ll n)
{
if(n==2||n==3) return true;
if(n%2==0) return false;
for(int i=3;i<=sqrt(n);i+=2)
if(n%i==0) return false;
return true;
}
至尊版本 因为素数只在6的倍数的左右两边,所以先对6取模,看是不是1和5,然后在对5+i6,到sqrt(n)取模, O(0.167logN)
bool judge(ll n)
{
if(n==2||n==3) return true;
if(n%6!=1&n%6!=5) return false;
double x=(double)sqrt(n);
for(int i=5;i<=x;i+=6)
if(n%i==0||n%(i+2)==0) return false ;
return true;
}
以上是关于判断一个数是否是素/质数的主要内容,如果未能解决你的问题,请参考以下文章