結果
| 問題 |
No.106 素数が嫌い!2
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2018-08-14 21:26:17 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 64 ms / 5,000 ms |
| コード長 | 1,343 bytes |
| コンパイル時間 | 1,528 ms |
| コンパイル使用メモリ | 169,712 KB |
| 実行使用メモリ | 26,640 KB |
| 最終ジャッジ日時 | 2024-09-24 09:02:19 |
| 合計ジャッジ時間 | 2,646 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 13 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
template <typename ForwardIterator>
size_t prime_sieve(ForwardIterator start, ForwardIterator end) {
if (start == end) return 0;
std::fill(start, end, 0);
for (ForwardIterator prime_it = start + 1; prime_it != end; ++prime_it) {
if (*prime_it == 1) continue;
size_t stride = (prime_it - start) + 1;
ForwardIterator mark_it = prime_it;
while ((end - mark_it) > stride) {
std::advance(mark_it, stride);
*mark_it = 1;
}
}
ForwardIterator out_it = start;
for (ForwardIterator it = start + 1; it != end; ++it) {
if (*it == 0) {
*out_it = (it - start) + 1;
++out_it;
}
}
return out_it - start;
}
int main(void) {
#ifdef DEBUG
freopen("input.txt", "r", stdin);
#endif
ios_base::sync_with_stdio(false);
cin.tie(NULL);
long N;
cin >> N;
int K;
cin >> K;
vector<int> primes(N);
size_t count = prime_sieve(primes.begin(), primes.end());
long n[N+1];
for (long i = 0; i < N + 1; i++) n[i] = 0;
for (size_t i = 0; i < count; ++i) {
int j = 1;
while (1) {
if (primes[i] * j <= N)
n[primes[i]*j] += 1;
else
break;
j++;
}
}
long ans = 0;
for (long i = 0; i < N + 1; i++) {
if (n[i] >= K) ans++;
}
cout << ans << endl;
return 0;
}