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

博客介绍了质数的定义,即比1大的整数中,除1和本身外无其他因数的数。还探讨了判断质数的高效思想,指出判断X是否为质数,从2尝试到√x即可。最后给出了三种Java代码实现方法,按效率从高到低排列。

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

什么是素数(质数)?

比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+" ");
			}
		}
	}

}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值