如何编写运行时间为O(N½)的确定正整数是否为素数的代码?

如何编写运行时间为O(N½)的确定正整数是否为素数的代码?

供参考:

int isPrime(int n)
{
    int i;
    if(n<=3) return n>1;
    for(i=2;i*i<=n;i++)
        if(n%i==0) return 0;
    return 1;
}

供参考


public static boolean isPrime(int n) {
        
        if(n == 2
            || n == 3){
            return true;
        }
        
        int count = (int)Math.sqrt(n);
        //循环 N½ 次就可以了
        for (int i = 2; i <= count; i++) {
            
            if(n % i == 0){
                return false;
            }
            
        }
        return true;
    }

```

我来给一下解释吧,假设a是b的约数那么存在b=a*c,那么我们只要枚举较小的约数即可,较小的约数不可能大于根号x,如果大于根号x,那么与较大的数相乘结果一定大于x

bool f(int x)
{    
    if(x<2)return 0;
    for(int i=2;i<=x/i;i++)//这样写可以防止数据爆int 或者longlong
    {
        if(x%i==0)return 0;
    }
    return 1;
}