Java 素性检验

Java 素性检验,java,time-complexity,primes,Java,Time Complexity,Primes,每个素数都是6k+1或6k-1的形式。为了检查一个数字是否为素数,我们可以使用下面的算法。我见过基于这些算法编写的程序 public boolean isPrime(int n) { if (n <= 1) return false; if (n <= 3) return true; if (n%2 == 0 || n%3 == 0) return false; for (int i=5; i*i<=n; i=i+6)

每个素数都是6k+1或6k-1的形式。为了检查一个数字是否为素数,我们可以使用下面的算法。我见过基于这些算法编写的程序

public boolean isPrime(int n)
{

    if (n <= 1)  return false;
    if (n <= 3)  return true;

    if (n%2 == 0 || n%3 == 0) return false;

    for (int i=5; i*i<=n; i=i+6)
        if (n%i == 0 || n%(i+2) == 0)
           return false;

    return true;
}

通过这种方法,我们可以将时间复杂度降低到O(1),而不是O(根(n))。如果我走错了方向,请告诉我。

正确的说法是,每个素数(2和3除外)在除以6时都有1或5的余数(请参阅以获得更深入的解释)。然而,事实并非如此。不是每一个余数为1或5除以6的数都是素数


以35为例。当除以6时,它有5的余数,但它不是素数(35=5 x 7)。

第2和第3项是您所述规则的例外;两者都不是规定的形式。。实际上,您正在查看2,3轮因式分解。一些网络研究会有帮助的。非常感谢。这就解释了一切。
public boolean isPrime(int number){
        boolean primeFlag = false;
        if(number == 0 || number ==1){
            return primeFlag;
        }
        if(number == 2 || number == 3){
            primeFlag = true;
        }
        if((number+1)%6 == 0){
            primeFlag = true;
        }
        if((number-1)%6 == 0){
            primeFlag = true;
        }
        return primeFlag;
    }