素数筛选法

匿名 (未验证) 提交于 2019-12-02 23:05:13
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_43412506/article/details/86737669

素数的求解在很多题目当中都会用到,最常见的就是直接暴力判断

 bool isprime(int number) {     if(number==1) return 0;     if(number==2) return 1;     for(int i=2;i*i<=number;i++)     {         if(number%i==0) return 0;     }     return 1; }

但是这种方法是一种糟糕的方法,它的耗时是巨大的,所以我们需要寻找更好的方法来解决这个问题

我们知道,最大公约数只有1和它本身的数叫做素数,那么只要剔除2 3 4 5 6...的倍数,得到的数就是素数

代码:

 const int maxn = 1e6+5; int p[maxn];   void isprime() { 	memset(p,0,sizeof(p)); 	for(int i = 2;i*i<maxn;i++) 	{ 		if(p[i]==0) 		{ 			for(int j = i*2;j<maxn;j+=i) 				p[j] = 1; 		} 	} }

除了剔除2,3,4,5,6..的倍数,还有两种方法筛选素数,具体参考三种素数筛选法详解

相关知识:

1.最大公约数只有1和它本身的数叫做质数(素数)
2.高斯猜测,n以内的素数个数大约与n/ln(n)相当,或者说,当n很大时,两者数量级相同。这就是著名的素数定理。  
3.十七世纪费马猜测,2的2^n次方+1,n=0,1,2…时是素数,这样的数叫费马素数,可惜当n=5时,2^32+1就不是素数,

4.18世纪发现的最大素数是2^31-1,19世纪发现的最大素数是2^127-1,20世纪末人类已知的最大素数是2^859433-1,用十进制表示,这是一个258715位的数字。
5.孪生素数猜想:差为2的素数有无穷多对。目前知道的最大的孪生素数是1159142985×2^2304-1和1159142985×2^2304+1。
6. 歌德巴赫猜想:大于2的所有偶数均是两个素数的和,大于5的所有奇数均是三个素数之和。其中第二个猜想是第一个的自然推论,因此歌德巴赫猜想又被称为1+ 1问题。我国数学家陈景润证明了1+2,即所有大于2的偶数都是一个素数和只有两个素数因数的合数的和。国际上称为陈氏定理。

文章来源: https://blog.csdn.net/qq_43412506/article/details/86737669
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!