Java质数查找算法

本文探讨了如何优化Java代码来查找质数,通过移除质数输出语句以提高运行效率。

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


1、其实将下面代码中的质数输出语句删除,还能再减少代码运行时间,打印输出也会降低代码运行效率。

import java.util.Scanner;

/**
 * @Description 测试 FindPrimeNumber1 中的结果
 * @author Cheven
 * @version v2.0
 * @date 2020年11月4日下午9:24:56
 */

public class FindPrimeNumberTest1 {
	public static void main(String[] args) {
		// 输入想要查找质数的范围
		Scanner scanner = new Scanner(System.in);
		int number = scanner.nextInt();
		
		FindPrimeNumber1.getPrimeNumber(number);
		scanner.close();
		/*
		 * 测试的范围为 100000
		 * 未优化时所花费时间:12278 毫秒
		 * 只经过优化一后所花费时间:1198 毫秒
		 * 只经过优化二后所花费时间:132 毫秒
		 * 经过优化一和优化二后所花费时间:48 毫秒
		 */
	}
}

/**
 * @Description 查找传入的数范围内的所有质数,质数也称为素数,只能被 1 和它本身整除的自然数,最小的质数是 2
 * @author Cheven
 * @version v2.0
 * @date 2020年11月4日下午9:04:49
 */

public class FindPrimeNumber1 {
	private static boolean isFlag = true;	// 定义一个布尔型的 标识 变量,用于判断该数是否是质数,true 为质数,false 为非质数
	private static int count = 0;			// 定义一个整型的 计数 变量,用于计算找出的质数个数
	
	// 获取查找前时间距离 1970 年 1 月 1 日 凌晨 00:00:00 的毫秒数
	private static final long startTime = System.currentTimeMillis();
	

	public static void getPrimeNumber(int number) {
		for (int i = 2; i <= number; i++) {	// 遍历 number 范围内的质数
			
//			for (int j = 2; j < i; j++) {

/****************************************************************
 优化二:将 i 开方,对所有数都有效,尤其是本身是质数的数
 ****************************************************************/
			for (int j = 2; j <= Math.sqrt(i); j++) {
				if (i % j == 0) {			// 如果能够除尽,说明该数不是质数
					isFlag = false;
					
/************************************************************
 优化一:加上 break,只对非质数的自然数有效 
 ************************************************************/
					break;
				}
			}
			
			if (isFlag == true) {	// 符合此处条件的都是质数
				count++;

				System.out.print(i + "\t");	// 输出质数
				
				if (count % 5 == 0) {	// 每输出 5 个质数就换一行
					System.out.println();
				}
			}
			
			isFlag = true;	// 将标识符重置
		}

		// 获取查找后时间距离 1970 年 1 月 1 日 凌晨 00:00:00 的毫秒数
		final long endTime = System.currentTimeMillis();
		
		System.out.println("\n一共查找到 " + count + " 个素数,花费时间为:"
							+ (endTime - startTime) + " 毫秒");	// 输出质数个数以及所用时间
	}
}

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值