用BigInteger实现大素数生成算法

转自:http://www.cnblogs.com/edwardstudy/archive/2012/11/24/2784174.html

一.通过素数的基本性质

  根据素数的性质(除了1和此整数(n)自身外,无法被其他自然数整除的数):即从2到n/2的数都不能整除n。

按 Ctrl+C 复制代码
按 Ctrl+C 复制代码

  用大于2^63的数去测试,结果因为运算量太大,运行半个来小时也没有结果出现。

二.通过素数表

  要提高速度就要减少进入判断方法中的循环:

  1.偶数可以排除

  2.大的合数(即素数的积)可以排除

  排除偶数直接增加一个判断即可实现,而排除大的合数也通过产生一个素数表实现。

  这里引援51CTO网友 梦朝思夕 BOLG,即“一般来说整除100 以内的所有素数可排除76% 不是素数的可能性 整除256以内的所有素数可排除80% 不是素数的可能性。” 而我同样地建大小为2000的表,private static BigInteger[] primeList = new BigInteger[2000]

primeList[1999] = 17389

复制代码
for(int i = 0, j = 2; i < 2000; j++)
{
    if(isPrime(j))
    {
        primeList[i] = BigInteger.valueOf(j);
        i++;
    }
}
复制代码

  再来一个方法判断新生成的大数判断是否为几个素数的积

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值