在java中不使用内置函数检查大值的素数。
我想编写一个java程序来检查大值的素数。我已经编写了这段代码,但代码中有错误。请帮助我解决这个问题,以便它可以很好地用于大值 另外,我的方法是否适合在没有内置函数的情况下检查大数的素数? 请提供其他可能的解决方案/方法 我的密码:在java中不使用内置函数检查大值的素数。,java,primes,Java,Primes,我想编写一个java程序来检查大值的素数。我已经编写了这段代码,但代码中有错误。请帮助我解决这个问题,以便它可以很好地用于大值 另外,我的方法是否适合在没有内置函数的情况下检查大数的素数? 请提供其他可能的解决方案/方法 我的密码: import java.math.*; import java.util.Scanner; public class CheckPrimeNumber { public static void main(String[] args) {
import java.math.*;
import java.util.Scanner;
public class CheckPrimeNumber {
public static void main(String[] args)
{
int flag=0;
BigInteger input;
try{
Scanner sc= new Scanner(System.in);
System.out.println("Enter a valid positive number: ");
String strinput=sc.nextLine();
input = new BigInteger(strinput);
sc.close();
if(input.equals(0) ||input.equals(1)){
System.out.println(input+" is not a prime number.");
}
else{
for(BigInteger i=2; i < input.divide(2); i++){
if(input.remainder(2) == 0){
System.out.println(input+" is not a prime number.");
flag=1;
break;
}
}
if(flag==0)
System.out.println(input +" is a prime number.");
}
}
catch(Exception e){
System.out.println("Please enter only valid positive number: ");
}
finally{
System.out.println("Thank you...!!!");
}
}
}
import java.math.*;
导入java.util.Scanner;
公共类校验素数{
公共静态void main(字符串[]args)
{
int标志=0;
大整数输入;
试一试{
扫描仪sc=新的扫描仪(System.in);
System.out.println(“输入一个有效的正数:”);
字符串strinput=sc.nextLine();
输入=新的大整数(strinput);
sc.close();
如果(input.equals(0)| | input.equals(1)){
System.out.println(输入+“不是质数”);
}
否则{
对于(BigInteger i=2;i
首先,您应该发布错误
您的方法应该是检查输入/2数字,看看它们是否可以被一些数字整除。这是对的,但不是最好的。检查其他素数算法以获得更好的性能
在for循环中,您应该检查input.rements(i)而不是input.rements(2)。一种可能的方法:
import java.math.*;
公共类解决方案{
公共静态void main(字符串[]args){
字符串n=“190197105486283723253308517”;
BigInteger num=新的BigInteger(n);
布尔标志=假;
if(num.equals(biginger.ONE)){
System.out.println(“非素数”);
返回;
}else if(num.equals(biginger.valueOf(2))){
System.out.println(“prime”);
返回;
}否则{
为了(
BigInteger i=BigInteger.valueOf(2);
(i.乘(i))。比较(num)!=1;
i=i.add(biginger.ONE)
) {
如果((num.mod(i))等于(BigInteger.ZERO)){
System.out.println(“非素数”);
flag=true;
打破
}
}
如果(!标志)
System.out.println(“prime”);
}
}
更好的方法使用BigInteger类的isProbablePrime(int确定性)方法
import java.math.*;
公共类解决方案{
公共静态void main(字符串[]args){
字符串n=“190197105486283723253308517”;
BigInteger num=新的BigInteger(n);
//设确定性值为100
//得到素数P的概率=(1–(1/2)^确定性)
System.out.println(num.isProbablePrime(100));
}
}
输出
true对于大数,使用这样的思想,给定n,n是素数,如果它不能被0到sqrt(n)范围内的任何素数整除试用除法很可能太慢,无法确定大整数的素性。这种情况下的一个好算法是Miller-Rabin算法,你可以在谷歌的帮助下或通过查看找到。你能公布你在问题中得到的确切错误吗?你正在使用。等于比较大整数和整数,它的计算结果总是为false,您使用compareTo来比较两个大整数值,这也使您的问题更加清楚。“我想编写一个java程序来检查大数值的素数。”????