首先说一下孪生素数的概念:孪生素数是指那些值相差2的素数对,比如:(3,5)、(5,7)……,注意:(2,3)很明显不是孪生素数,也就是说(3,5)是最小的孪生素数。
现在有一个题目,给出一个数n,要求计算出不大于n的孪生素数的数目,这个n可能会很大很大很大,大到像100000000那么大。
网上有个埃氏筛选法,用来得到n以内的所有素数,思想是这样的,先把2~n放入一个数组a中,遍历数组,从数组中删去a[i]的倍数(不包括a[i])(0<=i<n-1),完了之后数组中的剩余元素就是不大于n的所有素数了。
存在的问题:这个题的n比较大,如果开辟数组的话,空间复杂度较高。
我之前接触到的判断n是否为素数的方法:遍历2~sqrt(n)【判断步长为1】,如果其中某个数可以被n整除,那么n就不是素数,否则,n是素数。
通过上网查找资料,发现有更节省时间的判断素数的方法:
本宝宝是学数学出身的,所以先来两个定理哈哈~
定理:所有大于3的素数都可以被表示为6x+1或6x-1。
证明:很明显所有的大于3的数都可以被表示为6x-2,6x-1,6x+1,6x,6x+1,6x+2,6x+3,6x+4,6x+5
因为 6x-2,6x,6x+2,6x+4
java 孪生素数问题
最新推荐文章于 2021-02-24 16:27:46 发布