結果
| 問題 | No.12 限定された素数 |
| コンテスト | |
| ユーザー |
fiord
|
| 提出日時 | 2015-07-12 19:14:21 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 61 ms / 5,000 ms |
| コード長 | 959 bytes |
| 記録 | |
| コンパイル時間 | 1,368 ms |
| コンパイル使用メモリ | 161,728 KB |
| 実行使用メモリ | 10,336 KB |
| 最終ジャッジ日時 | 2024-11-24 08:22:55 |
| 合計ジャッジ時間 | 3,649 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 26 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
#define E 5000000
vector<int> cnt(10,0);
void change(int x,int cha){
while(x>0){
cnt[x%10]+=cha;
x/=10;
}
}
int main(){
int n; cin>>n;
bool a[10];
for(int i=0;i<10;i++) a[i]=false;
for(int i=0;i<n;i++){
int tem; cin>>tem;
a[tem]=true;
}
vector<int> prime;
bool sieve[E+1];
for(int i=0;i<=E;i++) sieve[i]=true;
for(int i=2;i<=E;i++){
if(sieve[i]){
prime.push_back(i);
for(int j=i*2;j<=E;j+=i) sieve[j]=false;
}
}
int ans=-1,end=0;
for(int i=0;i<(int)prime.size();i++){
change(prime[i],1);
for(int j=0;j<10;j++){
if(a[j]) continue;
while(cnt[j]>0){
change(prime[end],-1);
end++;
}
}
bool flag=true;
for(int j=0;j<10;j++){
if(a[j]&&cnt[j]==0) flag=false;
}
if(flag){
int k,l;
if(end!=0) k=prime[end-1]+1;
else k=1;
if(i+1!=(int)prime.size()) l=prime[i+1]-1;
else l=E;
ans=max(ans,l-k);
}
}
cout<<ans<<endl;
return 0;
}
fiord