For problem statement at 1000-1999/1000-1099/1040-1049/1043/problemF.txt this is a correct solution, but verifier at 1000-1999/1000-1099/1040-1049/1043/verifierF.go ends with All tests passed can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
)
type FastScanner struct {
r *bufio.Reader
}
func NewFastScanner() *FastScanner {
return &FastScanner{r: bufio.NewReader(os.Stdin)}
}
func (fs *FastScanner) NextInt() int {
sign := 1
val := 0
b, err := fs.r.ReadByte()
for err == nil && (b <= ' ' || b > '~') {
b, err = fs.r.ReadByte()
}
if err != nil {
return 0
}
if b == '-' {
sign = -1
b, err = fs.r.ReadByte()
}
for err == nil && b >= '0' && b <= '9' {
val = val*10 + int(b-'0')
b, err = fs.r.ReadByte()
}
return sign * val
}
func gcd(a, b int) int {
for b != 0 {
a, b = b, a%b
}
if a < 0 {
return -a
}
return a
}
func powmod(a, e, mod int64) int64 {
res := int64(1)
base := a % mod
for e > 0 {
if e&1 == 1 {
res = (res * base) % mod
}
base = (base * base) % mod
e >>= 1
}
return res
}
func combSmallK(n, k int, mod int64, invFactK int64) int64 {
if n < k {
return 0
}
if k == 0 {
return 1
}
res := int64(1)
for i := 0; i < k; i++ {
res = (res * int64(n-i)) % mod
}
res = (res * invFactK) % mod
return res
}
func main() {
in := NewFastScanner()
n := in.NextInt()
arr := make([]int, n)
maxV := 0
g := 0
hasOne := false
for i := 0; i < n; i++ {
x := in.NextInt()
arr[i] = x
if x == 1 {
hasOne = true
}
if x > maxV {
maxV = x
}
g = gcd(g, x)
}
if hasOne {
fmt.Println(1)
return
}
if g > 1 {
fmt.Println(-1)
return
}
freq := make([]int, maxV+1)
for _, v := range arr {
freq[v]++
}
cnt := make([]int, maxV+1)
for d := 1; d <= maxV; d++ {
s := 0
for m := d; m <= maxV; m += d {
s += freq[m]
}
cnt[d] = s
}
mu := make([]int8, maxV+1)
isComp := make([]bool, maxV+1)
primes := make([]int, 0, 30000)
mu[1] = 1
for i := 2; i <= maxV; i++ {
if !isComp[i] {
primes = append(primes, i)
mu[i] = -1
}
for _, p := range primes {
ip := i * p
if ip > maxV {
break
}
isComp[ip] = true
if i%p == 0 {
mu[ip] = 0
break
} else {
mu[ip] = -mu[i]
}
}
}
nonZeroMu := make([]int, 0)
for d := 1; d <= maxV; d++ {
if mu[d] != 0 && cnt[d] > 0 {
nonZeroMu = append(nonZeroMu, d)
}
}
const MOD1 int64 = 1000000007
const MOD2 int64 = 1000000009
const MOD3 int64 = 998244353
factK := [8]int64{1, 1, 2, 6, 24, 120, 720, 5040}
invFact1 := [8]int64{}
invFact2 := [8]int64{}
invFact3 := [8]int64{}
for k := 0; k <= 7; k++ {
invFact1[k] = powmod(factK[k], MOD1-2, MOD1)
invFact2[k] = powmod(factK[k], MOD2-2, MOD2)
invFact3[k] = powmod(factK[k], MOD3-2, MOD3)
}
for k := 2; k <= 7; k++ {
var s1, s2, s3 int64
for _, d := range nonZeroMu {
c := cnt[d]
if c < k {
continue
}
v1 := combSmallK(c, k, MOD1, invFact1[k])
v2 := combSmallK(c, k, MOD2, invFact2[k])
v3 := combSmallK(c, k, MOD3, invFact3[k])
if mu[d] > 0 {
s1 += v1
if s1 >= MOD1 {
s1 -= MOD1
}
s2 += v2
if s2 >= MOD2 {
s2 -= MOD2
}
s3 += v3
if s3 >= MOD3 {
s3 -= MOD3
}
} else { // mu[d] < 0
s1 -= v1
if s1 < 0 {
s1 += MOD1
}
s2 -= v2
if s2 < 0 {
s2 += MOD2
}
s3 -= v3
if s3 < 0 {
s3 += MOD3
}
}
}
if s1 != 0 || s2 != 0 || s3 != 0 {
fmt.Println(k)
return
}
}
// Should not reach here due to bounds; fallback
fmt.Println(7)
}