Java求素数(质数)的几种方法

什么是素数(质数)?

比1大的整数中,除了1和它本身以外,不再有别的因数,这种整数叫做质数或素数


思想,怎么做才能高效?

要判断X是否为质数,就从2一直尝试到x-1的做法效率是最差的! 其实只要从2一直尝试到√x,就可以了。因为因数都是成对出现的。比如,100的因数有:1和100,2和50,4和25,5和20,10和10。看出来没有?成对的因数,其中一个必然小于等于100的开平方,另一个大于等于100的开平方。


代码实现

效率由高到低

方法一(取平方根,效率高):

package hardCode;

public class 素数_质数 {

	public static void main(String[] args) {
		boolean flag;
		for(int i=2;i<100;i++) {
			flag=true;	//flag要放在循环里面,每个循环都要重新赋值
			for(int j=2;j<=Math.sqrt(i);j++) {	//i取根号比除2这样效率高些
				if(i%j==0) {
					flag=false;
					break;
				}
			}
			if(flag) {
				System.out.println(i+" ");
			}
		}
	}

}
package hardCode;

public class 素数_质数 {

	public static void main(String[] args) {
		//输出100以内的素数
		int i=0;
		int j=0;
		for(i=1;i<=100;i++) {
			for(j=2;j<=(int)Math.sqrt(i);j++) {
				if(i%j==0) {	//如果i可以与某个小于自身又不等于1的数整除
					break;	//那么跳出循环
				}
			}
			if(j>(int)Math.sqrt(i)) {
				System.out.println(i);
			}
		}
	}

}

方法二( /2 效率一般):

package hardCode;

public class 素数_质数 {

	public static void main(String[] args) {
		boolean flag;
		for(int i=2;i<100;i++) {
			flag=true;	//flag要放在循环里面,每个循环都要重新赋值
			for(int j=2;j<i/2;j++) {	//i除了2这样效率高些
				if(i%j==0) {
					flag=false;
					break;
				}
			}
			if(flag) {
				System.out.println(i+" ");
			}
		}
	}

}

方法三(效率最低):

package hardCode;

public class 素数_质数 {

	public static void main(String[] args) {
		boolean flag;
		for(int i=2;i<100;i++) {
			flag=true;	//flag要放在循环里面,每个循环都要重新赋值
			for(int j=2;j<i;j++) {
				if(i%j==0) {
					flag=false;
					break;
				}
			}
			if(flag) {
				System.out.println(i+" ");
			}
		}
	}

}

 

  • 8
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值