Java中判断素数的五种有效方法

 更新时间:2026年01月07日 08:28:17   作者:AaronYu_  
本文介绍了五种在Java中判断素数的有效方法,包括从2到x-1测试、排除偶数、仅测试到sqrt(x),以及使用素数表和计算机思维方式的高级策略,文章详细解释了每种方法的时间复杂度和实现细节,需要的朋友可以参考下

Java 中判断素数我们有很多方法,每种方法时间复杂度也不一样。今天我汇总了一下,分享给大家。既可以输出前 50 或 n 个素数,也可以判断 100 (或 n) 以内的素数。

1. 从 2 到 x-1 测试是否可以整除

Scanner in = new Scanner(System.in);

int x = in.nextInt();
boolean isPrime = true;
if ( x == 1)
{
	isPrime = false;
}
for( int i = 2; i< x; i++)
{
	if(x % i ==0)
	{
		isPrime = false;
		break;
	}
}
if( isPrime)
{
	System.out.println(x +"是素数");
	
}
else
{
	System.out.println(x+ "不是素数");
}

2. 去掉偶数后,从 3 到 x-1, 每次加 2

改进版,时间复杂度为 O(n/2)

if(x ==1 || x %2 ==0 && x !=2 )
{
	isPrime = false;
}
else
{
	for(int i =2; i<x; i +=2)
	{
		if( x % i == 0)
		{
			isPrime = false;
			break;
		}
	}
}
if( isPrime)
{
	System.out.println(x +"是素数");
	
}
else
{
	System.out.println(x+ "不是素数");
}

3. 2 方法上的改进版,只需到 sqrt(x) 即可以

数学上可以证明,sqrt(x) 即 x 的平方根
时间复杂度为 O(sqrt(n))

if(x ==1 || x %2 ==0 && x !=2 )
{
	isPrime = false;
}
else 
{
	for( int i =3; i< Math.sqrt(x); i+=2)
	{
		if( x % i == 0)
		{
			isPrime = false;
			break;
		}
	}
}
if( isPrime)
{
	System.out.println(x +"是素数");	
}
else
{
	System.out.println(x+ "不是素数");
}

4. 找出前 50 个素数

判断是否能被已知的的且 <x 的素数整除
这个方法可扩展性很强,建议掌握。

int [] primes = new int[50];
primes[0] =2;
int cnt =1;
Main:
for(int x= 3; cnt<primes.length; x++)
{
	for(int i = 0; i< cnt; i++)
	{
		if( x % primes[i] == 0)
		{
			continue Main;
		}
	}
	primes[cnt++] = x;
	
}
for ( int k: primes)
{
	System.out.print(k+ " ");
}

5. 用计算机的语言去思考

构造素数表,构造 n 以内的素数表

原理:

  1. 令 x =2;
  2. 将 2x、3x、4x 直至 ax<n 的数标记为非素数
  3. 令 x 为下一个没有被标记为非素数的数,重复 2;直至所有的数都已尝试完毕。
boolean[] isPrime = new boolean[100];
for( int i =2; i< isPrime.length; i++)
{
	isPrime[i] = true;
}
for(int i =2; i<isPrime.length; i++)
{
	if( isPrime [i])
	{
		for(int k=2; i*k < isPrime.length; k++)
		{
			isPrime[i*k] = false;
		}
	}
}
for( int i = 0; i<isPrime.length; i++)
{
	if(isPrime[i])
	{
		System.out.print(i+ " ");
	}
}

好了,以上便是五种判断素数的方法,第四种和第五种方法要求掌握,相信你能很快学会,一定一定要上手实操,debug 一下,你就懂了。

到此这篇关于Java中判断素数的五种有效方法的文章就介绍到这了,更多相关Java判断素数方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot 如何编写配置文件

    SpringBoot 如何编写配置文件

    这篇文章主要介绍了SpringBoot 编写配置文件的两种方法,帮助大家更好的理解和使用springboot框架,感兴趣的朋友可以了解下
    2020-11-11
  • SpringCloud OpenFeign与Ribbon客户端配置详解

    SpringCloud OpenFeign与Ribbon客户端配置详解

    在springcloud中,openfeign是取代了feign作为负载均衡组件的,feign最早是netflix提供的,他是一个轻量级的支持RESTful的http服务调用框架,内置了ribbon,而ribbon可以提供负载均衡机制,因此feign可以作为一个负载均衡的远程服务调用框架使用
    2022-11-11
  • 使用bat启动springboot项目并解决乱码问题

    使用bat启动springboot项目并解决乱码问题

    这篇文章主要介绍了window中使用bat启动springboot项目,并解决乱码问题
    2021-06-06
  • SpringBoot Bean被加载时进行控制

    SpringBoot Bean被加载时进行控制

    很多时候我们需要根据不同的条件在容器中加载不同的Bean,或者根据不同的条件来选择是否在容器中加载某个Bean,这就是Bean的加载控制,一般我们可以通过编程式或注解式两种不同的方式来完成Bean的加载控制
    2023-02-02
  • Java面试题之this 和 super 的区别解析

    Java面试题之this 和 super 的区别解析

    this 和 super 虽然都是Java中的关键字,但它们的作用和使用场景有着明显的区别,下面给大家介绍Java面试题之this 和 super 的区别解析,感兴趣的朋友一起看看吧
    2025-05-05
  • HashMap源码中的位运算符&详解

    HashMap源码中的位运算符&详解

    这篇文章主要介绍了HashMap源码中的位运算符&详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Springboot如何加载静态图片

    Springboot如何加载静态图片

    这篇文章主要介绍了Springboot如何加载静态图片,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • 解决IDEA中Maven项目中JSTL标签无效问题

    解决IDEA中Maven项目中JSTL标签无效问题

    这篇文章主要介绍了关于IDEA中Maven项目中JSTL标签无效问题的解决方法,需要的朋友可以参考下
    2018-09-09
  • mybatis高级映射一对多查询实现代码

    mybatis高级映射一对多查询实现代码

    本篇文章主要介绍了mybatis高级映射一对多查询实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-04-04
  • 带你了解Java常用类小结

    带你了解Java常用类小结

    今天带大家学习Java常用工具类,文中有非常详细的图文解说及代码示例,对正在学习java的小伙伴们很有帮助,需要的朋友可以参考下,希望能给你带来帮助
    2021-07-07

最新评论