結果
| 問題 | No.12 限定された素数 |
| コンテスト | |
| ユーザー |
古寺いろは
|
| 提出日時 | 2015-04-16 00:40:05 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 64 ms / 5,000 ms |
| コード長 | 1,150 bytes |
| 記録 | |
| コンパイル時間 | 1,604 ms |
| コンパイル使用メモリ | 162,648 KB |
| 実行使用メモリ | 10,336 KB |
| 最終ジャッジ日時 | 2024-11-24 08:03:06 |
| 合計ジャッジ時間 | 3,966 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 26 |
ソースコード
#include "bits/stdc++.h"
using namespace std;
#define MAX 5000001
bool dp[MAX];
vector<int> prime(){
vector<int> ret;
for (int i = 2; i < MAX; i++)
{
if (dp[i]) continue;
ret.push_back(i);
for (int j = i + i; j < MAX; j += i)
{
dp[j] = true;
}
}
return ret;
}
vector<int> A(10, 0);
vector<int> num(10, 0);
void check(int a, int move){
while (a != 0){
num[a % 10] += move;
a /= 10;
}
}
int main() {
int N;
cin >> N;
for (int i = 0; i < N; i++)
{
int temp;
cin >> temp;
A[temp] = 1;
}
vector<int> primes = prime();
int ans = -1;
int last = 0;
for (int i = 0; i < primes.size(); i++)
{
check(primes[i], 1);
for (int j = 0; j < 10; j++)
{
if (A[j]) continue;
while (num[j] > 0)
{
check(primes[last], -1);
last++;
}
}
bool flag = true;
for (int j = 0; j < 10; j++)
{
if (!A[j]) continue;
if (num[j] == 0)
{
flag = false;
}
}
if (i >= last && flag){
int K, L;
if (last != 0) K = primes[last - 1] + 1;
else K = 1;
if (i != primes.size() - 1) L = primes[i + 1] - 1;
else L = 5000000;
ans = max(ans, L - K);
}
}
cout << ans << endl;
}
古寺いろは