結果
| 問題 |
No.6 使いものにならないハッシュ
|
| コンテスト | |
| ユーザー |
bal4u
|
| 提出日時 | 2021-08-13 09:04:38 |
| 言語 | C (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 3 ms / 5,000 ms |
| コード長 | 899 bytes |
| コンパイル時間 | 811 ms |
| コンパイル使用メモリ | 31,744 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-10-02 17:05:32 |
| 合計ジャッジ時間 | 2,015 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 32 |
ソースコード
// yukicoder: 6. 使いものにならないハッシュ
// 2021.8.13
#include <stdio.h>
#include <math.h>
#define MAX 200005
char cn[MAX] = { 1,1,0,0,1 }; // 合成数
int a[MAX], hash[MAX], sz;
void sieve(int max) {
int i, j;
int sq = sqrt(max);
// for (i = 2; i <= max; i+=2) cn[i] = 1;
for (i = 3; i <= sq; i += 2) if (!cn[i]) {
for (j = i*i; j <= max; j += i) cn[j] = 1;
}
}
int main()
{
int i, k, t, K, N;
int ans, w;
scanf("%d%d", &K, &N);
sieve(N);
if (K <= 2) a[0] = hash[0] = 2, sz = 1, i = 3;
else i = (K/2)*2+1;
for ( ; i <= N; i+=2) if (!cn[i]) {
a[sz] = i;
k = i; while (k >= 10) {
t = 0; while (k) t += k % 10, k /= 10;
k = t;
}
hash[sz++] = k;
}
w = 0; for (i = 0; i < sz; ++i) {
t = 1<<hash[i];
k = i+1; while (k < sz && !(t & (1<<hash[k]))) t |= 1<<hash[k++];
if (k-i+1 >= w) w = k-i+1, ans = a[i];
}
printf("%d\n", ans);
return 0;
}
bal4u