結果
| 問題 |
No.12 限定された素数
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2021-04-22 02:45:39 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 1,915 bytes |
| コンパイル時間 | 1,190 ms |
| コンパイル使用メモリ | 117,684 KB |
| 最終ジャッジ日時 | 2025-01-20 22:32:56 |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | RE * 26 |
コンパイルメッセージ
main.cpp: In function ‘bool eratos()’:
main.cpp:50:1: warning: no return statement in function returning non-void [-Wreturn-type]
50 | }
| ^
ソースコード
#include <map>
#include <set>
#include <list>
#include <cmath>
#include <ctime>
#include <deque>
#include <queue>
#include <stack>
#include <bitset>
#include <cstdio>
#include <limits>
#include <vector>
#include <cstdlib>
#include <numeric>
#include <sstream>
#include <iostream>
#include <algorithm>
#include <functional>
#include <iomanip>
#include <unordered_map>
#include <memory.h>
#include <unordered_set>
#include <fstream>
using namespace std;
bool check[10];
int arr[5000001][10];
bool eratos()
{
bool isprime[5000001];
memset(isprime, true, sizeof(isprime));
for (int i = 2; i <= 5000000; i++)
{
if (isprime[i])
{
int temp = i;
while (temp > 0)
{
arr[i][temp % 10]++;
temp /= 10;
}
for (int j = 2 * i; j <= 5000000; j += i)
{
isprime[j] = false;
}
}
}
}
int main(void)
{
cin.tie(0);
ios::sync_with_stdio(false);
int n, t;
memset(check, false, sizeof(check));
memset(arr, 0, sizeof(arr));
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> t;
check[t] = true;
}
eratos();
int res = -1;
for (int i = 1; i <= 5000000; i++)
{
for (int j = 0; j < 10; j++)
{
arr[i][j] += arr[i - 1][j];
}
}
for (int i = 1; i <= 5000000; i++)
{
int lo = i;
int hi = 5000000;
int val = -1;
while (lo <= hi)
{
int mid = (lo + hi) / 2;
bool ok = true;
for (int j = 0; j < 10; j++)
{
if (check[j] == false && arr[mid][j] - arr[i - 1][j] > 0)
{
ok = false;
break;
}
}
if (ok)
{
val = max(val, mid);
lo = mid + 1;
}
else
{
hi = mid - 1;
}
}
if (val != -1)
{
bool ok = true;
for (int j = 0; j < 10; j++)
{
if (check[j])
{
if (arr[val][j] - arr[i - 1][j] == 0)
{
ok = false;
break;
}
}
}
if (ok)
{
//cout << i << ' ' << val << '\n';
res = max(res, val - i);
}
}
}
cout << res << '\n';
return 0;
}