学习日志(Java)输出质数及算法优化

题目:
10000以内的所有质数的输出。
质数:素数,只能被1和它本身整除的自然数。
初级代码:

package codetest;
/*100以内的所有质数的输出。
 质数:素数,只能被1和它本身整除的自然数。
 */
public class PrimeNumberTest1 {
	public static void main(String[] args) {
		for(int i=2;i<=10000;i++) {
			boolean isFlag=true;
			for (int j=2;j<i;j++) {
				if(i%j==0) {
					isFlag=false;
				}			
			}
			if(isFlag==true) {
				System.out.println(i);
			}
		}
	}
}

优化一:在if循环体中加一个break,在判断i能否被j除尽时,如果i被某一个j除尽就说明它不是质数,可以不用做此j以后的判断了
代码:

package codetest;
/*100以内的所有质数的输出。
质数:素数,只能被1和它本身整除的自然数。
对质数的优化
*/
public class PrimeNumberTest2 {
	public static void main(String[] args) {
		long start=System.currentTimeMillis();
		for(int i=2;i<=10000;i++) {//遍历10000以内的自然数
			boolean isFlag=true;//标识i是否被j除尽,一旦除尽,修改其值。
			for (int j=2;j<=Math.sqrt(i);j++) {//j被i去除//优化二
				if(i%j==0) {//i被j除尽
					isFlag=false;
					break;//优化一:只对本身非质数的自然数是有效的
				}			
			}
			if(isFlag==true) {
				System.out.println(i);
			}	
		}
		//获取当前时间距离1970-01-01 00:00:00的毫秒数
		long end=System.currentTimeMillis();
		System.out.println("所花费的时间为:"+(end-start));//209 优化一:break:43
	}
}

优化二: ①将 i(被除数)开根号,这样就可以减少运算次数。i 只需除以2到 i1/2中间的数。利用到了Math.sqrt(i)函数 意思是 i1/2
②利用continue 函数加标签。若 i 有一个除了1和它本身之外的因子,则说明它不是质数,直接执行下一次循环,判断 i+1。
代码:

package codetest;

public class PrimeNumberTest3 {
	public static void main(String[] args) {
		long start=System.currentTimeMillis();
		label:for(int i=2;i<=10000;i++) {
			for(int j=2;j<=Math.sqrt(i);j++) {
				if(i%j==0) {
					continue label;	
				}
			}System.out.println(i);	
		}
		long end=System.currentTimeMillis();
		System.out.println("所花费的时间为:"+(end-start));//209  优化一:break:43	 //优化二:根号:16
	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值