← Home
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)
}