java案例:使用循环打印100以内的素数(两种方法实现)

java案例:使用循环打印100以内的素数(两种方法实现)


前言

本节主要是讲解Java实现100以内素数的打印实现,如果可以进行代码的优化,我们就可以不断的修订代码,追求代码的效率和质量。


一、素数是什么?

素数,可以有两种描述(1除外)
  • 除了1和它本身,在没有其他因数,也就是只能写成“n = 1 x n“或“n = n x 1”这种形式
  • 在数学中往往会用整除这种语句来描述:当一个数只能被1和它本身整除时,这个数就叫做素数或质数。

二、解题思路

  • 首先外侧使用for循环遍历2-100的所有整数
  • 内层可以嵌套for循环,遍历此整数的因数
  • 在遍历的时候添加条件判断,通过给定的条件将符合要求的整数筛选出来
  • 打印输出结果

三,两种代码实现,嵌套for循环判断条件不同

3.1逻辑简单,新手容易想到此种方法,如果是练习可以使用,但是对于项目和产品,生产等方面,效率较低
/*
	案例题目:
	1.使用双重for循环打印 2 ~ 100之间所有的素数
*/

public class ForForPrimeTest {
	
	public static void main(String[] args) {
		
		System.out.println("\n==================第一种嵌套for循环条件==================");
		System.out.println("=========从2 ~ i - 1全部遍历,简单,效率低===========");
		// 1.外层for循环,遍历所有整数
		for(int i = 2; i <= 100; i++) {
			
			// 4.设置一个boolean类型的变量来作为标志,判断嵌套for循环中数据是否检测为素数
			boolean flag = true;
			
			// 2.内层for循环,遍历检测是否有除1和它本身之外的其它因数
			//从2 ~ i - 1全部遍历,简单,效率低
			for(int j = 2; j <= i - 1; j++) {
				
				// 3.如果有整除的数据,则此数据 i 不是素数
				if(0 == i % j) {
					flag = false;
					break;
				}
			}
			
			if(flag) {
				System.out.print(i + " ");
			}
		}
	}
}
3.2优化了判断条件,增加了数学思维,其实如果一个整数从2到整数的开平方根都无法整除此整数,那么后续的循环的整数也无法整除
  • 此处需要导入Java官方的Math库,方便我们使用sqrt进行开平方根。
/*
	案例题目:
	1.使用双重for循环打印 2 ~ 100之间所有的素数
*/

import java.lang.Math;

public class ForForPrimeTest {
	
	public static void main(String[] args) {

		System.out.println("\n==================第二种嵌套for循环条件==================");
		System.out.println("===========从2 ~ i的开平方根,提升效率,代码优化===========");
		for(int i = 2; i <= 100; i++) {
			
			// 4.设置一个boolean类型的变量来作为标志,判断嵌套for循环中数据是否检测为素数
			boolean flag = true;
			
			// 2.内层for循环,遍历检测是否有除1和它本身之外的其它因数
			//从2 ~ i的开平方根,提升效率,代码优化
			for(int j = 2; j <= Math.sqrt(i); j++) {
				
				// 3.如果有整除的数据,则此数据 i 不是素数
				if(0 == i % j) {
					flag = false;
					break;
				}
			}
			
			if(flag) {
				System.out.print(i + " ");
			}
		}
	}
}

总结

以上就是今天Java的100以内整数素数的判别。

你可能感兴趣的:(Java,java,开发语言)