java 孪生素数问题

首先说一下孪生素数的概念:孪生素数是指那些值相差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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值