用Java实现质数查找的两种方法及优化

第一种方法:

		long start = System.currentTimeMillis(); //用于记录开始前的时间,和程序结束后的时间比较得出运行时间
		boolean flag = true;  //用于标识当前自然数是否是质数
		for(int i = 2; i < 100000; i++)
		{
			for(int j = 2; j < i; j++) //将循环结束条件改为i的开方
			{
				if(i % j == 0)  //有数能除尽,将flag置为false,表示当前的i不是质数
				{
					flag = false;
				}
			}
			
			if(flag == true)
			{
				System.out.println(i);
			}
			flag = true;
		}
		
		long end = System.currentTimeMillis();  //用于记录程序结束的时间
		System.out.println("当前程序执行的总时间为:"+ (end - start));  //单位是毫秒

运行结果如下:查找100000以内的质数花费的时间是12682ms

 

优化:

①将内层循环的结束条件改为范围的开方

②在判断出当前自然数非质数之后跳出内层循环

		long start = System.currentTimeMillis(); //用于记录开始前的时间,和程序结束后的时间比较得出运行时间
		boolean flag = true;  //用于标识当前自然数是否是质数
		for(int i = 2; i < 100000; i++)
		{
			for(int j = 2; j <= Math.sqrt(i); j++) //将循环结束条件改为i的开方
			{
				if(i % j == 0)  //有数能除尽,将flag置为false,表示当前的i不是质数
				{
					flag = false;
					break;  //判断出当前自然数不是质数就跳出内层循环,避免不必要的运算
				}
			}
			
			if(flag == true)
			{
				System.out.println(i);
			}
			flag = true;
		}
		
		long end = System.currentTimeMillis();  //用于记录程序结束的时间
		System.out.println("当前程序执行的总时间为:"+ (end - start));  //单位是毫秒

运行结果:查找100000以内的质数花费时间是62ms,运行速度有相当明显的提升

 

第二种:使用label来标记外层循环

		long start = System.currentTimeMillis(); //用于记录开始前的时间,和程序结束后的时间比较得出运行时间
		label:for(int i = 2; i < 100000; i++) //使用label进行标识当前循环
		{
			for(int j = 2; j <= Math.sqrt(i); j++)
			{
				if(i % j == 0)  
				{
					continue label;  //有数能除尽,非质数,跳出label标记的外层循环的此次判断,进行下一个数的判断
				}
			}
			
			System.out.println(i);
		}
		
		long end = System.currentTimeMillis();  //用于记录程序结束的时间
		System.out.println("当前程序执行的总时间为:"+ (end - start));  //单位是毫秒

运行结果:运行时间为54ms,和优化后的第一种方法相差不大,但是代码要简洁点

 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值