For problem statement at 1000-1999/1100-1199/1170-1179/1174/problemE.txt this is a correct solution, but verifier at 1000-1999/1100-1199/1170-1179/1174/verifierE.go ends with All 100 tests passed can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
)
func power(base, exp int64) int64 {
res := int64(1)
base %= 1000000007
for exp > 0 {
if exp%2 == 1 {
res = (res * base) % 1000000007
}
base = (base * base) % 1000000007
exp /= 2
}
return res
}
func modInverse(n int64) int64 {
return power(n, 1000000007-2)
}
func main() {
reader := bufio.NewReader(os.Stdin)
var n int64
if _, err := fmt.Fscan(reader, &n); err != nil {
return
}
MOD := int64(1000000007)
k := int64(0)
for (int64(1) << (k + 1)) <= n {
k++
}
ans := int64(0)
P := int64(1)
for i := int64(2); i <= k; i++ {
v_i := int64(1) << (k + 1 - i)
v_prev := int64(1) << (k + 1 - (i - 1))
m_i := n / v_i
m_prev := n / v_prev
num := (m_i - m_prev) % MOD
den := (n - m_prev) % MOD
P = (P * num) % MOD
P = (P * modInverse(den)) % MOD
}
ans = (ans + P) % MOD
v1_3 := int64(3) * (int64(1) << (k - 1))
if v1_3 <= n {
for j := int64(1); j <= k; j++ {
P := int64(1)
for i := int64(2); i <= k; i++ {
var v_i, v_prev int64
if i <= j {
v_i = int64(3) * (int64(1) << (k - i))
} else {
v_i = int64(1) << (k + 1 - i)
}
if i-1 <= j {
v_prev = int64(3) * (int64(1) << (k - (i - 1)))
} else {
v_prev = int64(1) << (k + 1 - (i - 1))
}
m_i := n / v_i
m_prev := n / v_prev
num := (m_i - m_prev) % MOD
den := (n - m_prev) % MOD
P = (P * num) % MOD
P = (P * modInverse(den)) % MOD
}
ans = (ans + P) % MOD
}
}
fact := int64(1)
for i := int64(1); i <= n-1; i++ {
fact = (fact * i) % MOD
}
finalAns := (ans * fact) % MOD
fmt.Println(finalAns)
}