`
tanjw
  • 浏览: 15956 次
社区版块
存档分类
最新评论

算法 求素数

阅读更多

这里我写了几个求素数的方法和大家交流一下

// ① 进行穷举 时间复杂度O(n)

 

	private static boolean primer1(int number) {
		for(int i = 2 ; i < number -1 ; i++ ){
			if(number%i == 0){
				return false ;
			}
		}
		return true;
	}

 // ② 使用 √n 进行计算 时间复杂度O(√n)

 

	private static boolean primer2(int number) {
		// 这里我们使用 i*i 而不使用 Math.sqrt(number) 因为求根是一个非常耗时的操作
		for (int i = 2; i*i<number; i++) { 
			if(number%i == 0){
				return false ;
			}
		}
		return true;
	}

  // ③ 使用爱拉托逊斯算法 充分利用了一素数的定义 如果一个数 m 是 另一个数 n 的倍数则这个数肯定不是素数 时间复杂度

 

 
 

 

	private static boolean primer3(int number) {
		boolean[] prime = new boolean[number];  
		for (int i = 2; i < prime.length - 1; i++) {
			if(!prime[i-1])
				for (int j = i - 1; j < prime.length; j += i) 
					prime[j] = true ;
		}
		return !prime[number-1];
	}

 

 /// ④ 如第三个算法 其时间复杂度已经是非常小了,但是对内存的要求确实非常大的,我们可以使用√n 的算法和爱拉托逊斯算法进行结合计算的数越大对内存的压力减少越明显

        对于2到√n 还是有很多的数是不用进行计算的 ,如 2 4 6 8 , 其中2的倍数都不用进行计算

	private static boolean primer4(int number) {
		int k = (int) Math.sqrt(number);
		boolean[] isprime = new boolean[k] ;
		for (int i = 2; i <= k; i++) {
			if(isprime[i-1]){
				if(number%i == 0)
					return false ;
				for (int j = 0; j < k; j += j) {
					isprime[j-1] = true ;
				}
			}
		}
		return true;
	}

 

 

  • 大小: 2 KB
分享到:
评论

相关推荐

    概率算法求素数(c语言)

    ### 概率算法求素数(C语言) #### 实验目的与背景 本实验旨在通过C语言实现一种基于概率的方法来查找一定范围内的素数。概率算法是一种在计算机科学和数学领域广泛应用的技术,特别是在处理复杂问题时,它可以...

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

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

    素数最优算法

    ### 描述解析:“最简单的算法求素数~ 免去了繁杂的运算,节约时间” 描述中的“最简单的算法”通常指的是那些在实现上较为直观,代码量少,易于理解和维护的算法。而“免去了繁杂的运算,节约时间”则表明该算法在...

    求质数的算法

    埃拉托斯特尼筛法是一种高效的找出所有小于给定上限n的质数的算法。基本步骤如下: - 初始化一个大小为n的布尔数组,所有元素初始化为true,表示它们可能是质数。 - 从2开始,将所有2的倍数标记为非质数(即数组...

    aks算法判定素数

    Manindra Agrawal教授和他的两个学生Neeraj Kayal和Nitin Saxena在坎普尔印度技术研究...AKS算法证明了可以应用一个确定的算法在输入规模的多项式时间内决定一个整数是否为素数的问题,而没有使用任何未证明的数学假定

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

    在VB(Visual Basic)编程语言中,实现求素数的算法是一项基础且重要的任务。素数是指大于1的自然数,除了1和它自身以外,不能被其他自然数整除的数。例如,2、3、5、7、11等都是素数。下面我们将详细探讨如何使用VB...

    java求素数的经典算法

    ### Java求素数的经典算法 #### 一、引言 素数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的数。求解素数是计算机科学中的一个经典问题,特别是在密码学等领域有着重要的应用价值。Java作为一门流行...

    AKS素数检测算法(多项式时间内检测)

    ### AKS素数检测算法(多项式时间内检测) #### 概述 AKS算法是由Manindra Agrawal教授及其两名学生Neeraj Kayal和Nitin Saxena在坎普尔印度理工学院开发的一种用于判断整数是否为素数的新算法。该算法的重要贡献...

    算法-素数方阵(信息学奥赛一本通-T1446).rar

    《算法-素数方阵(信息学奥赛一本通-T1446)》这个压缩包文件中的核心主题是素数方阵,这是在信息学奥林匹克竞赛中常见的一种算法问题。素数,作为数学的基本元素,是所有正整数的基础,而素数方阵则是将素数排列成...

    java求素数

    java,很简单的算法求素数

    选择法求质数

    运用选择而不是普通算法求质数,运用新的思维方式,全新的实验方式。

    简易素数算法导出的经典素数算法

    素数,即那些只能被1和自身整除的自然数,它们在算法理论和编程实践中扮演着重要角色。尤其对于参加ACM竞赛的学生来说,掌握有效的素数检测算法,不仅能够提升编程能力,更能在竞赛中获得时间优势。因此,本文将详细...

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

    在提供的压缩包中,有两个文件:`用开根号求素数.cpp`是源代码文件,包含了上述算法的实现;`用开根号求素数.exe`是编译后的可执行文件,可以直接在支持C++的环境中运行,无需再次编译。 通过这种方式,初学者不仅...

    求1~1000质数,算法实现相对简单

    计算1~1000的质数的程序,实现的算法比较简单。

    最快素数算法(绝非线性筛选)1.6秒算出1亿内所有素数

    革命性素数算法:计算1亿内素数只要1.6秒 算法基本跟之前发的C#版相同(http://download.csdn.net/source/690005内有算法描述),由我的朋友杨力2年前设计,时间复杂O(n)。我对其进行了革命性的数据结构改进,空间...

    python 求素数算法 可以限定运行次数

    完整的 python 求素数算法 可以限定运行次数 可以中断保存

    算法课设--求素数问题

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

    c++ 求素数优化算法

    新手我热爱算法,第一次由个人琢磨出来的优化求任意两个数之间的素数算法,谢谢。我个人觉得,他似乎可以减少时间复杂度

    大范围素数算法

    大范围的素数算法,解决素数算法的问题,当程序需要,为什么非得20个字的描述呢

    eratosthenes 算法求指定范围内的素数

    eratosthenes 算法求指定范围内的素数

Global site tag (gtag.js) - Google Analytics