結果

問題 No.106 素数が嫌い!2
ユーザー t8m8⛄️t8m8⛄️
提出日時 2015-04-09 16:04:27
言語 Java
(openjdk 23)
結果
AC  
実行時間 188 ms / 5,000 ms
コード長 1,446 bytes
コンパイル時間 4,010 ms
コンパイル使用メモリ 78,076 KB
実行使用メモリ 51,128 KB
最終ジャッジ日時 2024-07-04 13:26:12
合計ジャッジ時間 6,413 ms
ジャッジサーバーID
(参考情報)
judge1 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 13
権限があれば一括ダウンロードができます

ソースコード

diff #

//No.106 素数が嫌い!2

import java.util.*;
import java.io.*;
import static java.util.Arrays.*;
import static java.lang.Math.*;

public class No106 {
    
    static final Scanner in = new Scanner(System.in);
    static final PrintWriter out = new PrintWriter(System.out,false);

    static void solve() {
        int n = in.nextInt();
        int k = in.nextInt();
        boolean[] isPrime = sieveOfEratosthenes(n+1);
        int[] cnt = new int[n+1];
        int ans = 0;
        for (int i=2; i<=n; i++) {
            if (isPrime[i]) cnt[i]++;
            if (cnt[i] >= k) ans++;
            if (!isPrime[i]) continue;
            for (int j=i+i; j<=n; j+=i) {
                cnt[j]++;
            }
        }
        out.println(ans);
    }

    static boolean[] sieveOfEratosthenes(int n) {
        boolean[] isPrime = new boolean[n];
        Arrays.fill(isPrime,true);
        isPrime[0] = isPrime[1] = false;
        for (int i=2; i<n; i++) {
            if (isPrime[i]) {
                for (int j=i+i; j<n; j+=i) isPrime[j] = false;
            }
        }
        return isPrime;
    }

    public static void main(String[] args) {
        long start = System.currentTimeMillis();

        solve();
        out.flush();

        long end = System.currentTimeMillis();
        //trace(end-start + "ms");
        in.close();
        out.close();
    }

    static void trace(Object... o) { System.out.println(deepToString(o));}
}
0