一种肥肠快的判断素数方法
容易证明,大于6的素数一定都在6的两侧,即6i + 1 或 6i - 1,而6i + 2 到 6i + 4 一定不是素数。因为6i + 2 = 2 (3i + 1), 6i + 3 = 3(2i + 1), 6i + 4 = 2(3i + 2)。
那么由这个结论,结合传统的判断素数方法(如下):
bool prime(int index) { for(int i=2;i<=sqrt(index);++i) if(index % i == 0) return false; return true; }
我们可以把i从每次增长1优化成每次增长6,并且大于6而不是6两边的数可以直接判断为合数。
优化后的判断素数代码如下:
bool prime(int index) { //忽略了1,有需要自己加个判断 if(index <= 3) return true; if(index % 6 != 1 && index % 6 != 5) return false; //不是6两边的数不是素数 int size = sqrt(index); for(int i=5;i<=size;i += 6) //6两边的数也不一定是素数 if(index % i == 0 || index % (i+2) == 0) return false; return true; }
优化后的效率是优化前的两倍还高!

浙公网安备 33010602011771号