获取小于N的素数 优化筛选法的C++实现

孪生素数(间隔为2的相邻素数)的相关定理与推论P1: 当 N 不小于 6 且 N-1 和 N+1 为 孪生素数, 则 N 一定是 6的倍数T1:当 N 不小于 1 且 N=6x-1 或 N=6x+1 不是素数, 那么 N 一定不是 2和 3的倍数P2:当N 不小于 5 时,若 N 为素数,那么N mod 6 =1或N mod 6 = 5T2: 一个大于5的数有且只有整除6余数是 1 或者 5 才有可能是素数

一个数 整除6 的余数 可能是 1,2,3,4,5 但是 余数 为2,3,4的情况下 肯定是合数

具体代码如下/* *************************************************************** * NAME: select_prime.cpp * DESC: * AUTHOR: Liu Dongguo(jealdean@outlook.com) * VERSION: 1.0 * CREATE: 2015-04-09 13:59:45 * LUTIME: 2015-04-10 01:53:40 * * Copyright (c) 2007 – 2015 Abodu.com,Inc. All Rights Reserved * *************************************************************** */* GetPrimesLessN(int nSize) //nSize是上限值{int fLen= nSize;(flag,’y’,fLen);flag[0]=flag[1]=’s’; //排除0和1for(int i=2;i*i<nSize;){for(int j=i*i;j<nSize;j+=i){flag[j]=’n’;}//探测下一个素数距离当前素数的可能步长if(i==2) //2特殊:到3 的距离就是1{i++;continue;}//2,4,6当中的一个i+=2;if(flag[i]==’n’) //2被标记过{i+=2;if(flag[i]==’n’) //4前被标记过i+=2;}}return flag;}int main(int argc, char *argv[]){int fLen= 10000;char* fls=GetPrimesLessN(fLen);int i= 0, cnt= 0;while(i<=fLen){if(fls[i]==’y’) //内容是’y’的数组元素下标为素数{printf( “%5d “,i );cnt++;if(!(cnt%20))printf(“\n”);}i++;}printf( “\n0-%d has %d prime numbers.\n”, fLen, cnt );;} /* end main */

,是会眨眼的星星,而当火车弯曲而行,这些星群便上上下下的画着弧线,

获取小于N的素数 优化筛选法的C++实现

相关文章:

你感兴趣的文章:

标签云: