Java实现求质数(素数)

Java实现求质数(素数)

素数(质数):我们把公约数只有1和它本身的数字称为素数又称为质数,即某个素数n,在[2,n-1]范围内没有其他自然数可以把n整除

具体使用Java的求法如下:

class Test{
	public static void main(String[] args){
		java.util.Scanner input = new java.util.Scanner(System.in);

		int num;
		while(true){
			//true是常量,常量是编译期间就可以确定的值
			System.out.print("请输入一个大于1的自然数:");
			num = input.nextInt();
			
			if(num>1){
				break;
			}
		}
		System.out.println("num = " + num);
		
		boolean flag = true;//假设num是素数
		
		//判断它是否是素数
		for(int i=2; i<num; i++){
			if(num % i ==0){//num被某个i整除了,num就不是素数
				System.out.println(num + "不是素数");
				flag = false;
				break;//找到其中一个可以把num整除的数,就可以结束了,因为num已经可以判定不是素数了
			}
		}
		
		//只有把[2,num-1]之间的所有数都检查过了,才能下定结论,num是素数
		if(flag){
			System.out.println(num + "是素数");
		}
		
	}
}

改进版:去除偶数后,从3到x-1,每次+2,进行判断,效率提高

Scanner in = new Scanner(System.in);

int x = in.nextInt();
boolean isPrime = true;
if(x ==1 || x %2 ==0 && x !=2 ){
	isPrime = false;
}else{
	for(int i =3; i<x; i +=2){//2,3都是素数,不进入循环
		if( x % i == 0){
			isPrime = false;
			break;
		}
	}
}
if( isPrime){
	System.out.println(x +"是素数");
}else{
	System.out.println(x+ "不是素数");
}

 再改进:引入Math.sqrt(num)方法

class Test07BreakExer1_2{
	public static void main(String[] args){
		java.util.Scanner input = new java.util.Scanner(System.in);
		
		int num;
		while(true){
			//true是常量,常量是编译期间就可以确定的值
			System.out.print("请输入一个大于1的自然数:");
			num = input.nextInt();
			
			if(num>1){
				break;
			}
		}
		System.out.println("num = " + num);
		
		boolean flag = true;//假设num是素数
		
		//判断它是否是素数
		//在[2, num的平方根]之间如果都没有一个自然数可以把num整除,那么num就是素数
		/*
		不是素数
		9的平方根是3,除1和它本身外的因数:3
		16的平方根是4,除1和它本身外的因数:2,4,8
		25的平方根是5,除1和它本身外的因数:5
		是素数
		7的平方根是2.64,除1和它本身外的只需要判断2,如果2不是,那么就不是
				无须判断,3,4,5,6
		*/
		for(int i=2; i<=Math.sqrt(num); i++){
			if(num % i ==0){
				System.out.println(num + "不是素数");
				flag = false;
				break;
			}
		}
		
		System.out.println(num + (flag?"是":"不是") + "素数");
	}
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值