結果
| 問題 | No.12 限定された素数 |
| コンテスト | |
| ユーザー |
diginatu
|
| 提出日時 | 2014-11-24 01:34:12 |
| 言語 | D (dmd 2.109.1) |
| 結果 |
CE
(最新)
AC
(最初)
|
| 実行時間 | - |
| コード長 | 1,322 bytes |
| 記録 | |
| コンパイル時間 | 516 ms |
| コンパイル使用メモリ | 6,692 KB |
| 最終ジャッジ日時 | 2024-11-14 18:55:32 |
| 合計ジャッジ時間 | 1,002 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
コンパイルエラー時のメッセージ・ソースコードは、提出者また管理者しか表示できないようにしております。(リジャッジ後のコンパイルエラーは公開されます)
ただし、clay言語の場合は開発者のデバッグのため、公開されます。
ただし、clay言語の場合は開発者のデバッグのため、公開されます。
コンパイルメッセージ
Main.d(14): Error: instead of C-style syntax, use D-style `bool[5000001] is_prime`
ソースコード
import std.stdio, std.string, std.conv
,std.array,std.algorithm, std.range
,std.math;
void main(){
readln();
auto Ao = readln().strip().split().map!(to!int)();
int A;
foreach(int t; Ao) {
A += 1<<t;
}
bool is_prime[5000001];
void Eratosthenes(int lim){
is_prime[] = true;
is_prime[0] = false;
is_prime[1] = false;
for(int p=2; p*p<=lim; p++) {
if(is_prime[p]){
for(int k=p*p; k<=lim; k+=p) is_prime[k] = false;
}
}
}
Eratosthenes(5000000);
int st = 1;
int maxr = 0;
bool ing = true;
int At = A;
foreach(int i; 1 .. 5000001) {
if(is_prime[i]) {
bool inc = true;
char[] tpr = i.to!(char[]);
auto a = tpr.map!(a => a-'0')().array;
a.sort().uniq();
int tt = 0;
foreach(int t; a) {
tt |= 1<<t;
}
foreach(int t; a) {
if(A&1<<t) {
} else {
inc = false;
break;
}
}
if(ing) {
if(inc) {
At &= ~tt;
} else {
if(!At) {
maxr = max(maxr, i - 1 - st);
}
ing = false;
}
} else {
if(inc) {
At = A;
At &= ~tt;
ing = true;
st = i;
}
}
} else if(!ing) {
At = A;
ing = true;
st = i;
}
}
if(ing && !At)
maxr = max(maxr, 5000000 - st);
writeln( maxr==0?-1:maxr );
}
diginatu