bool is_prime(int n){
if(n < 2) return false;
for(int i = 2;i <= n / i;i ++){ //优化内容
if(n % i == 0){
return false;
}
}
return true;
}
注意这里的一个总要优化是for循环的终止条件是i<=n/i。为什么不是i<=n或者i<=根号n呢?以为i<=n太慢了原始解法,而i<=根号n的话,其实和这里的优化是类似的,但是计算机底层在执行根号的时候会比较慢。那具体为什么i<=n/i可以呢?想不通的建议找几个例子试试就知道了,严格证明也不复杂。
必须判断nn是否小于2,当然每种方法都需要判断!!
一定是i≤sqrt(n),要不然你也会像我一样死得很惨
最后如果这个数经历了重重考验,一定要记得返回truetrue(当然所有方法都需要)
如果不返回的话,也是可以的
import java.io.*;
public class Main {
static int n;
static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
static BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
public static void main(String[] args) throws IOException {
n = Integer.parseInt(reader.readLine());
while (n-- > 0) {
int a = Integer.parseInt(reader.readLine());
if (is_prime(a)) {
writer.write("Yes\n");
} else {
writer.write("No\n");
}
}
writer.flush();
writer.close();
reader.close();
}
public static boolean is_prime(int n) {
if (n < 2) return false;
for (int i = 2; i <= n / i; i++) {//推荐这种写法,而不是i * i <= n 或者i <= sqrt(n)
if (n % i == 0) {
return false;
}
}
return true;
}
}