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

求质数的方法

阅读更多

看java核心,有一求质数的程序:

public class Sieve {
	public static void main(String[] s) {
		int n = 2000000;
		long start = System.currentTimeMillis();
		BitSet b = new BitSet(n + 1);//用于记录是否为质数
		int count = 0;
		int i;
		for (i = 2; i <= n; i++){
			b.set(i);             //初始化
		}
		//忽略 1
		i = 2;
		while (i * i <= n) {
			if (b.get(i)) {
				count++;
				//清除所有i的倍数
				int k = 2 * i;
				while (k <= n) {
					b.clear(k);
					k += i;
				}
			}
			i++;
		}
		//处理剩余没处理的
		while (i <= n) {
			if (b.get(i))
				count++;
			i++;
		}
		long end = System.currentTimeMillis();
		System.out.println(count + " primes");
		System.out.println((end - start) + " milliseconds");
	}
}

 C语言版:

 using namespace std;

 int main() {
	 const int N = 2000000;
	 clock_t cstart = clock();

	 bitset<N + 1> b;
	 int count = 0;
	 int i;
	 for (i = 2; i <= N; i++)
		 b.set(i);
	 i = 2;
	 while (i * i <= N){
		 if (b.test(i)){
			 count++;
			 int k = 2 * i;
			 while (k <= N) {
				 b.reset(k);
				 k += i;
			 }
		 }
		 i++;
	 }
	 while (i <= N) {
		 if (b.test(i))
			 count++;
		 i++;
	 }

	 clock_t cend = clock();
	 double millis = 1000.0 * (cend - cstart) / CLOCKS_PER_SEC;

	 cout << count << " primes\n"
	 	<< millis << " milliseconds\n";

	 return 0;
}

 

分享到:
评论

相关推荐

    java求素数的经典算法

    本示例中采用的是一个较为简单的求素数方法:遍历所有小于等于某个上限(在这里是`MAX_PRIMES`)的整数,并检查每个数是否为素数。如果一个数不能被之前找到的任何素数整除,则认为它是素数。这种方法虽然简单直观,...

    用开根号求素数_manner4ep_C++_素数开根号_求素数;_求素数开方_

    在本主题中,我们将深入探讨如何利用C++语言,通过开方根的方法来高效地求解素数。这种方法对初学者尤其友好,因为它既直观又易于理解。 首先,我们需要了解为什么开方根法能提高求素数的效率。传统的检查素数的...

    求素数的方法

    求1到100的素数,不过这个算法可能不是很好,另外,还要有,5个换行输出

    python求质数的3种方法

    本文为大家分享了多种方法求质数python实现代码,供大家参考,具体内容如下 题目要求是求所有小于n的质数的个数。 求质数方法1: 穷举法: 根据定义循环判断该数除以比他小的每个自然数(大于1),如果有能被...

    求素数 PrimeNumber

    此外,还有一种更优化的求素数方法,叫做米勒-拉宾素性测试(Miller-Rabin Primality Test),它是一种概率测试,可以快速地判断一个大数是否为素数,但可能存在一定的误差率。不过,对于大多数实际应用来说,...

    最快求素数的算法,求100000000以下素数0.3秒

    最快求素数的算法,求100000000以下所有素数0.3秒 , 在10000000以下的数中找到664579个素数,耗时53毫秒

    C 语言求素数

    7. 数学概念——素数的定义和判断方法。 通过这个项目,初学者不仅可以学习到C语言的基础知识,还能了解到算法设计与实现的基本思路。实践中,可以尝试优化算法,比如使用更高效的“埃拉托斯特尼筛法”来找出一定...

    c++两种方法求素数

    在C++中,求解素数的方法多种多样,本篇将重点介绍两种常见方法:使用STL容器中的`bitset`以及低级位筛法。 一、STL `bitset`求素数 `bitset`是C++标准库中的一个模板类,它提供了一种高效存储和操作位的方式。在...

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

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

    matlab 求素数 (四种方法)

    埃拉托斯特尼筛法是一种经典的求素数的方法,通过逐步筛选掉非素数来得到所有小于给定数的素数。在MATLAB中,可以创建一个全为1的布尔数组,然后从2开始,每次找到一个未被筛掉的数(即当前的素数),就将其倍数...

    动态规划求素数.

    ### 动态规划求素数 #### 背景与目的 在计算机科学与数学领域,素数(或称质数)是指仅能被1和自身整除的大于1的自然数。对于某些应用场景,例如密码学中的RSA算法,需要快速高效地生成或识别大范围内的素数。传统...

    【Java】求1-100范围内的素数递归方法

    【Java】求1-100范围内的素数递归方法代码例子。分享,感谢。

    求素数_求素数_源码.zip

    总之,“求素数_求素数_源码.zip”中的代码可能展示了多种求解素数的方法,从基础的暴力检测到高效的筛法。学习和理解这些源码可以帮助我们更好地掌握数论和算法设计,对于提升编程技能非常有帮助。

    求素数,回文数,回文素数,可逆素数

    素数(Prime Number),又称质数,是只能被1和自身整除的大于1的自然数。例如,2、3、5、7等。 #### 判断方法 在代码中,`isPrimer` 函数用于判断一个给定的整数 `n` 是否为素数。具体步骤如下: - 遍历从1到`n/2`...

    新的方法球10-1000内的素数 C#

    在编程领域,素数是指大于1且只有两个正因数(1和自身)的...对于这个新的求素数方法,尽管描述简略,但我们可以推测它可能是一种优化的算法,旨在提高效率或降低内存消耗。要了解更多详情,我们需要进一步研究源代码。

    vb算法,求素数,用程序实现

    - **埃拉托斯特尼筛法**:这是一种经典的求素数的方法,通过创建一个整数序列,然后从2开始,依次将每个数的倍数划去,剩下的就是素数。但在VB中,我们可以简化为逐个检查每个数是否为素数。 - **判断素数的条件**...

    求质数 java 简单的java程序

    这是一个用java编写的控制台程序,可以求一个数是不是质数,并且把这个数按递减顺序求,一直求到1,一次性的显示判断

    JS求1到任意数之间的所有质数的方法详解

    方法: 利用js中求模, 看是否有余数. —&gt; 3%2 = 1; 5%2 = 3……… 代码如下: function test (n) { // 判断一个数是否能被自身小的正整数(除开1和自身)整除.如果能整除则不是质数,否则反之. for(var k = 2;k &lt; n...

    关于求素数的二种方法

    本文将深入探讨两种在Java中求素数的方法,并结合提供的`Test1.java`和`Test2.java`文件,来理解这两种方法的实现细节。 首先,我们要明确什么是素数。素数是指大于1且只有1和它本身两个正因数的自然数,例如2、3、...

    算法课设--求素数问题

    求素数问题。埃拉托色尼筛法(Sieve of Eratosthenes)是一种用来求所有小于N的素数的方法。从建立一个整数2~N的表着手,寻找i˂的整数,编程实现此算法,并讨论运算时间。

Global site tag (gtag.js) - Google Analytics