如何编写运行时间为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;
}