記一次時間優(yōu)化嘗到的甜頭 —— 一次急忙的提交

匆忙寫了一道計(jì)算題,直接上代碼:


import java.util.Scanner;
public class Main {
    public static boolean[] isWP = new boolean[10001]; // 存儲是否素?cái)?shù)的數(shù)組,true表示下標(biāo)值對應(yīng)的是素?cái)?shù)
    public static void main (String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int sum = 0;
        int q = 0;
        for (int i = 1; i <= n; i++) {
            if (is(i)) {
                isWP[i] = true;
            }
        }
        for (int i = 2; i <= n; i++) {
            if (isQ(i)) {
                sum++;
            }
        }
        System.out.println(sum);
    }
    public static boolean isQ(int q) {
        // 判斷是否滿足 q = p^k
        for (int p = 2; p <= q; p++) {
            for (int k = 1;; k++) {
                int result = (int)Math.pow(p, k);
                if (result > q) {
                    break;
                }
                if (result == q && isWP[p]) {
                    return true;
                }
            }
        }
        return false;
    }
    // 判斷是否是素?cái)?shù)的方法
    public static boolean is (int n) {
        if (n <= 1) {
            return false;
        }
        for (int i = 2; i < n; i++) {
            if (n % i == 0) {
                return false;
            }
        }
        return true;
    }
}

一點(diǎn)小收獲:

  • 用數(shù)組存儲計(jì)算值(因?yàn)橐粋€數(shù)是否是素?cái)?shù)這個是固定的,會起到很好的優(yōu)化效果);
  • 代碼整潔性(由于自己寫的也比較匆忙,還是不夠完美,不過有個原則,重復(fù)的內(nèi)容、計(jì)算等最好不要有?。?/li>
  • 做到以上兩點(diǎn)基本上可以滿足題的時間要求,還可以在區(qū)間上進(jìn)行優(yōu)化!
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容