Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中不使用内置函数检查大值的素数。_Java_Primes - Fatal编程技术网

在java中不使用内置函数检查大值的素数。

在java中不使用内置函数检查大值的素数。,java,primes,Java,Primes,我想编写一个java程序来检查大值的素数。我已经编写了这段代码,但代码中有错误。请帮助我解决这个问题,以便它可以很好地用于大值 另外,我的方法是否适合在没有内置函数的情况下检查大数的素数? 请提供其他可能的解决方案/方法 我的密码: import java.math.*; import java.util.Scanner; public class CheckPrimeNumber { public static void main(String[] args) {

我想编写一个java程序来检查大值的素数。我已经编写了这段代码,但代码中有错误。请帮助我解决这个问题,以便它可以很好地用于大值

另外,我的方法是否适合在没有内置函数的情况下检查大数的素数?

请提供其他可能的解决方案/方法

我的密码:

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)。

一种可能的方法:

  • 检查小素数的可整除性,比如5000。这就找到了容易的方法

  • (可选)运行单个Fermat测试,以2为基数。这将以比米勒-拉宾试验更低的成本消除更多的复合材料

  • 如果数字尚未标记为复合,则重复进行Miller-Rabin测试,达到所需的精度水平。如果运行64个测试,则出错的几率小于1/2^128

  • 您可能还想查看在这方面非常有用的一个副本。

    在java中检查素数以获得大值,而不使用内置函数。

    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程序来检查大数值的素数。”????