输入正整数n,输出大于正整数n的最小的质数——以Java语言为例

// 编写一个方法,输出大于某个正整数n的最小的质数
//思路:运用方法的最小化功能,多个方法的嵌套。
//第一,创建一个求最小质数的方法;
//第二,创建一个输出大于正整数n的质数的方法;
//第三,输出对应所需的最小质数。
public class MinimumPrimeNumber{
	public static void main(String[] args){
		
		java.util.Scanner s=new java.util.Scanner(System.in);//创建一个输入扫描器
		System.out.println("请输入一个正整数n:");
		int n=s.nextInt();//输入n
		System.out.println("大于正整数"+n+"的最小的质数为:"+zuiXiaoZhiShu(n));
		
		


	}
	public static int zuiXiaoZhiShu(int n){
		//创建一个输出大于某个正整数n的最小质数的方法
		while(!isZhiShu(++n)){
		}
		
		return n;

	}

	public static boolean isZhiShu(int i){//判断i是否为质数的方法
		for (int j=2;j<i ;j++ ){
			if (i%j==0){
				return false;
			
			}
			
		}
		return true;
	}
}在这里插入代码片

效果图如下:
在这里插入图片描述

这个题目要求你编写一个程序,给定一个范围内的大整数 N(具体来说,2 < N < 10^9),判断这个数字 N 是否是素数素数是指大于1的自然数,除了1和本身以外不再有其他正因数的数。 下面是判断素数的一种常见算法,即“试除法”或埃拉托斯特尼筛法,但这里我们可以用一种更高效的算法——埃氏判别法(也叫Miller-Rabin测试)来简化过程,因为对于如此大的数值,直接暴力试除效率较低。不过注意,这种方法并不是100%准确的,但它在实际应用中非常有效,并且满足题目要求。 以下是一个简单的 Java 方法实现: ```java import java.math.BigInteger; public class PrimeCheck { public static boolean isPrime(BigInteger n) { if (n.compareTo(BigInteger.valueOf(2)) <= 0 || n.mod(BigInteger.valueOf(2)).equals(BigInteger.ZERO)) { return false; } // 如果 n 是偶数,跳过所有偶数检查 for (int i = 3; i <= Math.sqrt(n.doubleValue()); i += 2) { if (n.mod(i).equals(BigInteger.ZERO)) { return false; } } // 对于较大的偶数(可能为合数),还需要进行特殊处理 if (!n.equals(BigInteger.valueOf(2))) { BigInteger d = n.subtract(BigInteger.ONE); while (d.testBit(0) == false && d.compareTo(BigInteger.valueOf(2)) >= 0) { d = d.shiftRight(1); } for (int r = 0; r < 5; r++) { // 这里一般设置为足够多次,比如 10 次,提高概率 int a = (int) (Math.random() * (d.subtract(BigInteger.ONE))).add(BigInteger.ONE); if (BigInteger.valueOf(a).modPow(BigInteger.valueOf(2), n).compareTo(BigInteger.ONE) != 1 && BigInteger.valueOf(a).modPow(BigInteger.valueOf(2 * d - 2), n).compareTo(BigInteger.ONE) != 1) { return false; } } } return true; } public static void main(String[] args) { BigInteger input = BigInteger.valueOf(97); System.out.println(isPrime(input) ? "prime" : "not prime"); } } ``` 这段代码首先检查了基本的素数条件,然后使用 Miller-Rabin 测试,其中 `5` 次迭代足以提供很高的准确性。运行上述代码,如果输入 `97`,输出将会是 `"prime"`。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值