Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.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 为什么';我的费马&x27;s的素性测试方法有效吗?_Java_Primes - Fatal编程技术网

Java 为什么';我的费马&x27;s的素性测试方法有效吗?

Java 为什么';我的费马&x27;s的素性测试方法有效吗?,java,primes,Java,Primes,我正在尝试实现一个方法,该方法使用Fermat的素性测试检查任何整数,如果它是素数,则返回true 我根据输入是否小于40来划分问题。如果输入小于40,那么我对每个整数应用测试,直到n-1。否则,如果整数大于40,则对每个整数应用测试,直到40为止。然而,对于某些素数,它失败了 public static boolean isPrime (double n){ int counter=0; boolean isPrime=false; if(n<40) {

我正在尝试实现一个方法,该方法使用Fermat的素性测试检查任何整数,如果它是素数,则返回true


我根据输入是否小于40来划分问题。如果输入小于40,那么我对每个整数应用测试,直到n-1。否则,如果整数大于40,则对每个整数应用测试,直到40为止。然而,对于某些素数,它失败了

public static boolean isPrime (double n){
    int counter=0;
    boolean isPrime=false;
    if(n<40) {
        for (int a = 2; a < n - 1; a++) {
            if (Math.pow(a, n - 1) % n == 1) counter++;
        }

        if (counter == n - 3) isPrime = true;
    }
        else {

        for (int a = 2; a <= 40; a++) {
            if (Math.pow(a, n - 1) % n == 1) counter++;

        }
        if (counter == 39) isPrime = true;
    }
    return isPrime;
}
public静态布尔值isPrime(双n){
int计数器=0;
布尔isPrime=false;

如果(nMath.pow对double起作用,结果只是近似值。另一方面,Modulo对范围高达20多亿的int起作用,那么你的pow是否有可能产生一些大于这个值的数字?(17^18似乎是19的肯定赌注…)

那么,如何解决这个问题:
您可以使用乘法和整数上的模来实现自己的pow(a,b,n)(幂模n)。这应该可以正常工作。制作一个函数,使用一系列乘法将a提升为幂b,在每一步后对中间结果应用%n…

“但是,对于某些素数,它会失败”…比如…?它适用于3,5,7,但不适用于19,也就是说,根据定义,素数是整数,为什么你的函数采用双精度?我尝试了int,但仍然不起作用。我只是将它改为双精度,因为我认为这是一个数学问题。pow issue我认为这是一个逻辑问题…你不“做fermat测试”你把它们加在一起!…而且它似乎没有按预期的方式工作