`
i2534
  • 浏览: 182523 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

偶尔发现,但很实用,官方的求素数的方法

    博客分类:
  • util
 
阅读更多

以前老是为求素数发愁,不管怎么做,效率总是不高.

今天为求一个数的阶乘而使用了BigInteger.本来想找一下BigInteger中输出科学计数格式的方法,没想到偶尔看到了:

 

public BigInteger

nextProbablePrime

()
返回大于此 BigInteger 的可能为素数的第一个整数。此方法返回的数是合数的概率不超出 2-100 。此方法在执行以下搜索时将始终不会跳过素数:如果它返回 p ,则不存在 this < q < p 的素数 q
返回:
返回大于此 BigInteger 的可能为素数的第一个整数。
抛出:
ArithmeticException - this < 0
从以下版本开始:
1.5

简直不敢相信,众里寻他千百度,蓦然回首那人却在灯火阑珊处.赶快测试一下,求100以内的素数:

 

	public static void main(String[] args) {
		BigInteger bi = BigInteger.ZERO;
		while (true) {
			bi = bi.nextProbablePrime();
			if (bi.intValue() > 100) {
				break;
			}
			System.out.print(bi + " ");
		}
	}
 

 

快速运行完毕:

输出:

2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

我等算法薄弱人士的福音啊.

分享到:
评论
2 楼 kimmking 2010-11-10  
<div class="quote_title">i2534 写道</div>
<div class="quote_div">
<p>以前老是为求素数发愁,不管怎么做,效率总是不高.</p>
<p>今天为求一个数的阶乘而使用了BigInteger.本来想找一下BigInteger中输出科学计数格式的方法,没想到偶尔看到了:</p>
<p> </p>
<pre>public <a title="java.math 中的类" href="/admin/java/math/BigInteger.html">BigInteger</a>

<strong>nextProbablePrime</strong>

()</pre>
<dl>
<dd>返回大于此 <code>BigInteger</code> 的可能为素数的第一个整数。此方法返回的数是合数的<span style="color: #ff0000;">概率不超出 2<sup>-100</sup></span> 。此方法在执行以下搜索时将始终不会跳过素数:如果它返回 <tt>p</tt> ,则不存在 <tt>this &lt; q &lt; p</tt> 的素数 <tt>q</tt> 。 </dd>
<dd></dd>
<dd><dl>
<dt>
<strong>返回:</strong> </dt>
<dd>返回大于此 <code>BigInteger</code> 的可能为素数的第一个整数。 </dd>
<dt>
<strong>抛出:</strong> </dt>
<dd>
<code><a title="java.lang 中的类" href="/admin/java/lang/ArithmeticException.html">ArithmeticException</a> </code>- <tt>this &lt; 0</tt> 。 </dd>
<dt>
<strong>从以下版本开始:</strong> </dt>
<dd>1.5 </dd>
</dl></dd>
</dl>
<p>简直不敢相信,众里寻他千百度,蓦然回首那人却在灯火阑珊处.赶快测试一下,求100以内的素数:</p>
<p> </p>
<pre name="code" class="java"> public static void main(String[] args) {
BigInteger bi = BigInteger.ZERO;
while (true) {
bi = bi.nextProbablePrime();
if (bi.intValue() &gt; 100) {
break;
}
System.out.print(bi + " ");
}
}</pre>
 
<p> </p>
<p>快速运行完毕:</p>
<p>输出:</p>
<p>2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 </p>
<p>我等算法薄弱人士的福音啊.</p>
</div>
<p> </p>
<p> </p>
1 楼 kimmking 2010-11-10  
miller-rabin test
  the DSA spec (NIST FIPS 186-2)

http://www.cnblogs.com/feature/articles/1824667.html

相关推荐

    求质数表的方法,30000以内质数

    质数,也称为素数,是大于1且只能被1和它本身整除的自然数。在数学领域,质数的研究具有重要的理论价值,而生成质数表则是探索质数性质的基础工作。在这个主题中,我们将探讨两种常用的方法来生成30000以内的质数表...

    原创的素数的求法 希望对您有用

    求素数的方法有很多,其中一种常见的方法是除余法,这里我们将深入探讨这个原创的求素数算法,希望对理解和应用素数有所帮助。 【问题描述】 我们需要编写一个程序,找出2到N之间所有的素数。为了提高效率,我们...

    求解第N个质数(第N个素数)vs2010项目

    项目中采用的方法是试除法,这是一种基础但实用的质数检测方法。 试除法的基本原理是,对于任何给定的数n,如果它能被小于或等于其平方根的任何正整数整除,那么n就不是质数。反之,如果不能被这些数整除,那么n...

    筛选法求素数

    总的来说,筛选法求素数是一种基础但实用的算法,对于理解和掌握算法思想有着重要意义。在C++中实现这个算法,可以加深对数组、循环、条件判断等基本编程概念的理解,同时为学习更复杂的算法打下基础。

    求200以内的所有素数的简单算法!

    求200以内的所有素数的简单算法!很实用的求素数算法!

    线性筛法求素数的原理与实现

    ### 线性筛法求素数的原理与实现 #### 一、线性筛法的概念及优势 线性筛法是一种高效的算法,能够在O(n)的时间复杂度内找到所有不大于n的素数。相比于传统的遍历取余判断素数的方法,线性筛法在需要频繁判断素数的...

    sushu.rar_求素数

    总的来说,筛选法求素数是一种实用的算法,尤其在处理较大范围内的素数查找时,效率明显优于简单的试除法。通过理解和掌握这个算法,程序员可以提升在算法竞赛中的竞争力,并且对理解计算机科学中的基础概念有极大...

    C经典算法之Eratosthenes筛选求质数

    寻找质数的方法有很多种,其中Eratosthenes筛法是一种古老而有效的算法,可以高效地找出指定范围内的所有质数。本文将详细介绍该算法的工作原理,并通过一个C语言程序来实现这一算法。 #### 质数定义及重要性 质数...

    java程序求素数和并输出结果

    在IT领域,特别是编程语言Java中,涉及到数学计算与...综上所述,虽然简单的代码实现了求解10000以内素数和的功能,但通过算法优化和扩展思考,我们可以进一步提高代码的性能和实用性,这也是IT领域不断追求的目标。

    Java中素数算法非常实用

    通过以上分析,我们可以看到这段Java代码提供了一个简单但有效的素数检测方法。尽管如此,为了提高性能和可读性,我们还可以对代码进行一些改进。希望本文能帮助读者更好地理解素数检测算法及其在Java中的实现方式。

    求100内的质数 c++ 通俗易懂

    ### 求100内的质数:C++实现 #### 背景与目标 在数学领域,质数(Prime Number)是一个大于1的自然数,并且除了1和它本身以外不再有其他因数。了解质数的概念及其计算方法对于计算机科学、密码学等领域具有重要...

    筛选法和大素数模板快速统计素数个数并输出幸运数字

    在编程领域,素数是计算机科学中的一个重要概念,它们在密码学、算法...这两个方法在编程实践中具有很高的实用价值,特别是在处理大规模数据时。通过深入理解这些算法,我们可以更有效地解决相关的数学问题和编程挑战。

    C# 求某个正整数的素数算法应用程序

    求素数的算法通常有多种实现方式,这里我们将重点讨论一种常见的方法——埃拉托斯特尼筛法(Sieve of Eratosthenes)。 埃拉托斯特尼筛法是一种有效的找出一定范围内所有素数的算法。在C#中,我们可以创建一个bool...

    素数计算器 作者 SaneBow

    描述部分强调了该软件的速度特性,能够“在极短时间内计算出制定范围内的素数”,这通常意味着程序采用了高效的算法,可能是基于埃拉托斯特尼筛法(Sieve of Eratosthenes)或其他优化方法。同时,它还能将计算结果...

    质数和合数课件实用教案.pptx

    质数,也称为素数,是指在大于1的自然数中,除了1和它本身以外没有其他因数的数。例如,2、3、5、7、11、13、17、19等都是质数。而合数则是指有超过两个因数的正整数,即除了1和它本身外,至少还有一个其他的因数。4...

    2到任意的整数之间的素数...C#windows窗体应用程序.....

    总的来说,这个C# Windows窗体应用程序提供了一个实用的工具,帮助用户快速找到一个范围内的素数,对于学习C#编程和理解素数概念是很好的实践案例。同时,它也展示了如何结合图形用户界面与算法来解决问题,这是软件...

    用来筛选自然数中的质数程序

    质数,又称素数,是大于1且只有1和它本身两个正因数的自然数。在数学领域,质数的研究具有重要的理论价值,而在密码学、计算机科学等领域也有广泛应用。例如,RSA公钥加密算法就是基于大质数的性质构建的。 筛选...

    java使用筛选法求n以内的素数示例(java求素数)

    总之,Java中的筛选法求素数是一种实用的算法,它结合了数学原理和编程技巧,能够有效地找出一定范围内的所有素数。通过理解并实践这段代码,开发者可以深入理解素数筛选法的实现细节,并将其应用到更广泛的编程场景...

    质数和合数教学课件1实用教案.pptx

    质数,也称为素数,是指在大于1的自然数中,除了1和它本身外,不能被其他自然数整除的数。而合数则是指除了1和它本身外,至少还有一个其他的正因数。 在提供的内容中,我们看到一系列从1到20的数字,每个数字都列出...

Global site tag (gtag.js) - Google Analytics