For problem statement at 0-999/300-399/300-309/303/problemD.txt this is a correct solution, but verifier at 0-999/300-399/300-309/303/verifierD.go ends with case 96 failed: expected 12 got 11
exit status 1 can you fix the verifier? package main
import (
"fmt"
)
func isPrime(p int) bool {
if p < 2 {
return false
}
for i := 2; i*i <= p; i++ {
if p%i == 0 {
return false
}
}
return true
}
func powMod(base, exp, mod int64) int64 {
var res int64 = 1
base %= mod
for exp > 0 {
if exp%2 == 1 {
res = (res * base) % mod
}
base = (base * base) % mod
exp /= 2
}
return res
}
func main() {
var n int
var x int64
if _, err := fmt.Scan(&n, &x); err != nil {
return
}
if !isPrime(n + 1) {
fmt.Println(-1)
return
}
var factors []int
temp := n
for i := 2; i*i <= temp; i++ {
if temp%i == 0 {
factors = append(factors, i)
for temp%i == 0 {
temp /= i
}
}
}
if temp > 1 {
factors = append(factors, temp)
}
p := int64(n + 1)
for b := x - 1; b >= 2; b-- {
if b%p == 0 {
continue
}
isPrimitive := true
for _, q := range factors {
if powMod(b, int64(n/q), p) == 1 {
isPrimitive = false
break
}
}
if isPrimitive {
fmt.Println(b)
return
}
}
fmt.Println(-1)
}