{-# LANGUAGE BangPatterns #-} import Control.Monad.ST import Control.Monad.State import Data.Char import Data.Coerce import qualified Data.ByteString.Char8 as BSC8 import qualified Data.Vector.Unboxed as VU type Parser a = StateT BSC8.ByteString Maybe a runParser :: Parser a -> BSC8.ByteString -> Maybe (a, BSC8.ByteString) runParser = runStateT {-# INLINE runParser #-} int :: Parser Int int = coerce $ BSC8.readInt . BSC8.dropWhile isSpace {-# INLINE int #-} main :: IO () main = do q <- readLn :: IO Int ts <- VU.unfoldrN q (runParser $ (,,) <$> int <*> int <*> int) <$> BSC8.getContents putStr . unlines . map show . VU.toList $ solver ts solver :: VU.Vector (Int, Int, Int) -> VU.Vector Int solver ts = runST $ do VU.forM ts $ \(d, a, b) -> do if a == 0 then return $ func b d - func 0 d else return $ func b d - func (a - 1) d func :: Int -> Int -> Int func x d = let (q, r) = divMod x (d - 1) in d * (d - 1) `div` 2 * q + r * (r + 1) `div` 2