【基础算法】试除法判定质数(优化)

文章目录

  • 算法优化模板
  • 题目
  • 代码实现

算法优化模板

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(当然所有方法都需要)
如果不返回的话,也是可以的

题目

【基础算法】试除法判定质数(优化)_第1张图片
【基础算法】试除法判定质数(优化)_第2张图片

代码实现

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;
    }
}

你可能感兴趣的:(数据结构与算法,算法,质数,试除法,优化版,性能优化)