bool is_prime(int x){
if(x==1)
return false;
if(x==2||x==3)
return true;
if(x%6!=1&&x%6!=5)
return false;
int s=sqrt(x);
for(int i=5;i<=s;i+=6)
if(x%i==0||x%(i+2)==0)
return false;
return true;
}
原理:大于3的素数可能出现在6的两侧,因为对于6x+2,它可以被2整除,对于6x+3,它可以被3整除,对于6x+4,它可以被2整除,所以大于3的素数只可能是6x+1或6x+5的格式。
PS.之前在别人的解题代码上看到的思路,具体来源不记得了,原创请联系我。