美文网首页
记一次时间优化尝到的甜头 —— 一次急忙的提交

记一次时间优化尝到的甜头 —— 一次急忙的提交

作者: 进击的NULL | 来源:发表于2019-01-15 22:02 被阅读0次

    匆忙写了一道计算题,直接上代码:

    
    import java.util.Scanner;
    public class Main {
        public static boolean[] isWP = new boolean[10001]; // 存储是否素数的数组,true表示下标值对应的是素数
        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;
        }
        // 判断是否是素数的方法
        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;
        }
    }
    

    一点小收获:

    • 用数组存储计算值(因为一个数是否是素数这个是固定的,会起到很好的优化效果);
    • 代码整洁性(由于自己写的也比较匆忙,还是不够完美,不过有个原则,重复的内容、计算等最好不要有!);
    • 做到以上两点基本上可以满足题的时间要求,还可以在区间上进行优化!

    相关文章

      网友评论

          本文标题:记一次时间优化尝到的甜头 —— 一次急忙的提交

          本文链接:https://www.haomeiwen.com/subject/pbuudqtx.html