package main import . "fmt" import . "sort" import . "math" const M = 998244353 // func min(a,b int) int { if a 1e12 { Println(-1) return } ms := make([]int, 60) for i := range ms { ms[i] = 1 } ans := 0 next := 1 for next <= n && len(ps) > 0 { last := ps[0] ps = ps[1:] mm := 1 for _, m := range ms[3:] { mm = mm*m%M } lower := int(Sqrt(float64(next))) upper := int(Sqrt(float64(last.value-1))) for s := lower; s <= upper; s++ { a := s*s b := (s+1)*(s+1)-1 if s == lower { a = next } if s == upper { b = min(b, min(n, last.value-1)) } var t int if b%2 == 0 { t = (b/2)%M*((b+1)%M)%M } else { t = ((b+1)/2)%M*(b%M)%M } if a%2 == 0 { t += M - (a/2)%M*((a-1)%M)%M } else { t += M - ((a-1)/2)%M*(a%M)%M } ans += t%M*s%M*mm%M ans %= M } next = last.value ms[last.power] = last.base for len(ps) > 0 && last.value == ps[0].value { p := ps[0] ps = ps[1:] ms[p.power] = p.base } } Println(ans) } type P struct { value, base, power int }