結果
| 問題 |
No.6 使いものにならないハッシュ
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2016-03-14 18:36:56 |
| 言語 | Go (1.23.4) |
| 結果 |
AC
|
| 実行時間 | 3 ms / 5,000 ms |
| コード長 | 1,473 bytes |
| コンパイル時間 | 14,661 ms |
| コンパイル使用メモリ | 219,248 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-09-16 16:32:08 |
| 合計ジャッジ時間 | 15,681 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 32 |
ソースコード
package main
import (
"bufio"
"fmt"
"math"
"os"
"strconv"
)
var sc = bufio.NewScanner(os.Stdin)
var rdr = bufio.NewReaderSize(os.Stdin, 1000000)
func main() {
sc.Split(bufio.ScanWords)
k, n := nextInt(), nextInt()
ps := eratosthenes(n)
for i, v := range ps {
if v >= k {
ps = ps[i:]
break
}
}
h := make([]int, len(ps))
for i, v := range ps {
h[i] = hash(v)
}
m := make([]int, 10)
l, tmp := 0, 0
c := make([]int, 2)
for i, v := range h {
if m[v] != 0 {
if tmp >= c[0] {
c = []int{tmp, l}
}
tmp -= m[v] - l
tmp++
tmpL := l
l = m[v]
for _, v := range h[tmpL:m[v]] {
m[v] = 0
}
m[v] = i + 1
continue
}
m[v] = i + 1
tmp++
}
if tmp >= c[0] {
c = []int{tmp, l}
}
fmt.Println(ps[c[1]])
}
func hash(i int) int {
n := 0
for ; i > 0; i /= 10 {
n += i % 10
}
if n >= 10 {
return hash(n)
}
return n
}
func nextLine() string {
sc.Scan()
return sc.Text()
}
func nextInt() int {
i, _ := strconv.Atoi(nextLine())
return i
}
func eratosthenes(n int) []int {
if n < 2 {
return []int{}
}
r := int(math.Floor(math.Sqrt(float64(n))))
list := make([]bool, n+1)
list[0], list[1] = true, true
for i := 2; i <= r; i++ {
if !list[i] {
for j := i * i; j <= n; j += i {
list[j] = true
}
}
}
l := n / int(math.Ceil(math.Log(float64(n))))
primes := make([]int, 0, l)
for i, v := range list {
if v {
continue
}
primes = append(primes, i)
}
return primes
}