质数还可以这样求???

来,我们先来科普一下数学概念

质数(又称为素数):只能被1和它本身整除的自然数。
基本思想:即从2开始,到这个数-1结束为止,都不能被这个数本身整除。

二话不说,咱先来康康四位仙女姐姐来写写代码。
您品,您细品
康康哪位代码写的最优、哪个最合你口味

翠花妹妹

public class Test01 {

	public static void main(String[] args) {
		
		boolean isFlag = true;//标识i是否被j除尽,一旦除尽,修改其值
		int count = 0;//记录质数的个数
		
		//获取当前时间距离1970-01-01 00:00:00的毫秒数
		long start = System.currentTimeMillis();
		
		for(int i = 2;i <= 10000;i++) {//遍历1000000以内的自然数
			for(int j = 2;j < i;j++) {//j:被i去除
				
				if(i % j == 0) {//i被j除尽
					isFlag = false;
				}
			}
			
			if(isFlag) {
				//输出质数
				//System.out.println(i);
				
				//为了比较算法性能,直接计算质数个数,而不输出
				count++;
			}
			
			isFlag = true;//重置isFlag
		}
		
		//获取当前时间距离1970-01-01 00:00:00的毫秒数
		long end = System.currentTimeMillis();
		System.out.println("执行程序所使用的时间:" + (end - start));//606ms
		
		System.out.println("质数个数:" + count);
	}

}

貂蝉姐姐

public class Test02 {

	public static void main(String[] args) {
	
		boolean isFlag = true;//标识i是否被j除尽,一旦除尽,修改其值
		int count = 0;//记录质数的个数
		
		//获取当前时间距离1970-01-01 00:00:00的毫秒数
		long start = System.currentTimeMillis();
		
		for(int i = 2;i <= 10000;i++) {//遍历1000000以内的自然数
			for(int j = 2;j < i;j++) {//j:被i去除
				
				if(i % j == 0) {//i被j除尽
					isFlag = false;
					break;
				}
			}
			
			if(isFlag) {
				//输出质数
				//System.out.println(i);
				
				//为了比较算法性能,直接计算质数个数,而不输出
				count++;
			}
			
			isFlag = true;//重置isFlag
		}
		
		//获取当前时间距离1970-01-01 00:00:00的毫秒数
		long end = System.currentTimeMillis();
		System.out.println("执行程序所使用的时间:" + (end - start));//76ms
		
		System.out.println("质数个数:" + count);
	}

}

黛玉妹妹

public class Test03 {

	public static void main(String[] args) {
		
		boolean isFlag = true;//标识i是否被j除尽,一旦除尽,修改其值
		int count = 0;//记录质数的个数
		
		//获取当前时间距离1970-01-01 00:00:00的毫秒数
		long start = System.currentTimeMillis();
		
		//优化二:对本身是指数的自然数是有效的;
		for(int i = 2;i <= 10000;i++) {//遍历1000000以内的自然数
			for(int j = 2;j <= Math.sqrt(i);j++) {//j:被i去除
				
				if(i % j == 0) {//i被j除尽
					isFlag = false;
				}
			}
			
			if(isFlag) {
				//输出质数
				//System.out.println(i);
				
				//为了比较算法性能,直接计算质数个数,而不输出
				count++;
			}
			
			isFlag = true;//重置isFlag
		}
		
		//获取当前时间距离1970-01-01 00:00:00的毫秒数
		long end = System.currentTimeMillis();
		System.out.println("执行程序所使用的时间:" + (end - start));//13ms
		
		System.out.println("质数个数:" + count);
	}

}

玉环大娘

public class Test04 {

	public static void main(String[] args) {
		
		//获取当前时间距离1970-01-01 00:00:00的毫秒数
		long start = System.currentTimeMillis();
		
		int count = 0;//记录质数的个数
		lable:for(int i = 2;i<= 10000;i++) {//遍历1000000以内的自然数
			for(int j = 2;j <= Math.sqrt(i);j++) {//j:被i去除
				
				if(i % j == 0) {//i被j除尽
					continue lable;
				}
			}
			
			//能执行到此步骤的,都是质数
			count++;
			
		}
		
		//获取当前时间距离1970-01-01 00:00:00的毫秒数
		long end = System.currentTimeMillis();
		System.out.println("执行程序所使用的时间:" + (end - start));//6ms
		System.out.println("质数个数:" + count);
	}

}

各位看官,相信你们已经发现四位仙女姐姐写的代码几乎一样,最大的区别在两个for循环的控制,控制条件不一样,算法性能不一样。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值