【Java基础[判断一个数是否是质数]】

这篇博客介绍了如何使用Java编写算法来判断一个数是否为质数,并列出100到200之间的所有质数。通过优化的循环结构和使用`continue`关键字,提高了代码效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

判断一个数是否是质数:
对于质数的定义是:质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。

	public static void main (String []args){
		//质数的处理:判断一个数是否是质数
		int n =Integer.parseInt(args[0]);
		
		boolean flag=true;
		//除了1和n本身,2~n-1中只要有能整除n的,n就不是质数
		for(int i=2;i<n;i++){
			if(n%i==0){
				flag =false;
				break;
			}
		}
		//如果flag没有被刷值,证明n是质数
		if(flag){
			System.out.println(n+"是质数");
		}else{
			System.out.println(n+"不是质数");
		}
	}

输出结果:
在这里插入图片描述

列出100~200以内的所有质数:

	public static void main (String []args){
		//列出100-200以内的所有质数
		System.out.println("100-200以内的所有质数:");
		//确定鉴定范围
		for(int i=100;i<200;i++){
			//假定i是质数
			boolean flag=true;
			//判断2~i-1中有没有能整除i的数
			for(int j=2;j<i;j++){
				//如果i被某个j整除了,说明i不是质数
				if(i%j==0){
					//推翻假设
					flag=false;
					//停止本次循环
					break;
				}
			}
			//如果假设没有被推翻,证明是质数
			if(flag){
				System.out.print(i+"  ");
			}
		}
	}

输出结果:

使用continue进行改进:

	public static void main (String []args){
		//列出100以内的所有质数
		l1:for(int i=2;i<100;i++){
			for(int j=2;j<i;j++){
				if(i%j==0){
					continue l1;
				}
			}
			System.out.print(i+"  ");
		}
	}

输出结果:
在这里插入图片描述

### Java判断一个是否为素的实现方法 在 Java 编程中,判断一个是否为素的核心逻辑在于验证该是否仅能被 1 和其自身整除。以下是几种常见的实现方式及其改进版本。 --- #### 方法一:基础版(遍历至 `n-1`) 最简单的方式是从 2 开始逐一尝试能否整除目标 `n`,直到 `n-1`。如果发现任何可以整除的,则表明该不是素。 ```java import java.util.Scanner; public class BasicPrimeCheck { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入一个:"); int num = scanner.nextInt(); boolean isPrime = true; if (num < 2) { // 小于2的均不为素 isPrime = false; } else { for (int i = 2; i < num; i++) { // 遍历从2到num-1的所有 if (num % i == 0) { // 若找到可整除的,则退出循环 isPrime = false; break; } } } if (isPrime) { System.out.println(num + " 是素"); } else { System.out.println(num + " 不是素"); } } } ``` 这种方法虽然直观易懂,但在性能上较差,尤其是当输入较大的字时会显得非常低效[^3]。 --- #### 方法二:优化版(遍历至 `√n`) 由于若一个有因分解形式 \(a \times b\),那么至少有一个因子小于等于其平方根。因此只需要检查从 2 到 √n 的所有整即可减少不必要的运算量。 ```java import java.util.Scanner; public class OptimizedPrimeCheck { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入一个:"); int num = scanner.nextInt(); boolean isPrime = true; if (num < 2) { // 小于2的均不为素 isPrime = false; } else { for (int i = 2; i <= Math.sqrt(num); i++) { // 只需检查到sqrt(num) if (num % i == 0) { // 找到可整除的即停止 isPrime = false; break; } } } if (isPrime) { System.out.println(num + " 是素"); } else { System.out.println(num + " 不是素"); } } } ``` 这种优化显著提升了运行效率,尤其针对大值更为明显[^2]。 --- #### 方法三:进一步优化(排除偶与特定模式匹配) 考虑到所有的偶都不可能是素(除了2),以及某些固定的模规律特性,我们可以跳过部分无意义的迭代过程来加速计算速度。 ```java import java.util.Scanner; public class AdvancedPrimeCheck { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入一个:"); int num = scanner.nextInt(); boolean isPrime = true; if (num < 2) { // 小于2的均不为素 isPrime = false; } else if (num == 2 || num == 3) { // 特殊情况处理 isPrime = true; } else if (num % 2 == 0 || num % 3 == 0) { // 剔除明显的非素情形 isPrime = false; } else { for (int i = 5; i * i <= num; i += 6) { // 使用步长为6的跳跃策略 if (num % i == 0 || num % (i + 2) == 0) { isPrime = false; break; } } } if (isPrime) { System.out.println(num + " 是素"); } else { System.out.println(num + " 不是素"); } } } ``` 此版本不仅延续了前一种方案的优点,而且通过引入额外条件过滤掉了更多不可能成为素的情况,从而达到更高的执行效能[^4]。 --- ### 总结 以上三种不同层次复杂度的做法分别适应不同程度的需求场景——初学者可以从第一个例子入手理解基本概念;而对于追求更高性能的应用开发人员而言,则应优先选用最后两种经过改良后的算法之一作为其实现依据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值