Problem:
Score : 100 points

Problem Statement

In this problem, you should process T testcases.

For each testcase, you are given four integers N, M, A, B.

Calculate \sum_{i = 0}^{N - 1} floor((A \times i + B) / M).

Constraints

1 \leq T \leq 100,000

1 \leq N, M \leq 10^9

0 \leq A, B < M

Input

Input is given from Standard Input in the following format:

T
N_0 M_0 A_0 B_0
N_1 M_1 A_1 B_1
:
N_{T - 1} M_{T - 1} A_{T - 1} B_{T - 1}

Output

Print the answer for each testcase.

Sample Input 1

5
4 10 6 3
6 5 4 3
1 1 0 0
31415 92653 58979 32384
1000000000 1000000000 999999999 999999999

Sample Output 1

3
13
0
314095480
499999999500000000

Solution in Lua (Lua 5.3.5) (judge verdict: Accepted)

--[[------------------------------------------------------------------------]]--
local function floor_sum(elm_num, div_num, mul_num, add_num)
	local ans = 0
	if mul_num >= div_num then
		ans = ans + (elm_num - 1) * elm_num * (mul_num // div_num) // 2
		mul_num = mul_num % div_num
	end
	if add_num >= div_num then
		ans = ans + elm_num * (add_num // div_num)
		add_num = add_num % div_num
	end

	local y_max = (mul_num * elm_num + add_num) // div_num
	local x_max = (y_max * div_num - add_num)
	if y_max == 0 then
		return ans
	else
		ans = ans + (elm_num - (x_max + mul_num - 1) // mul_num) * y_max
		ans = ans + floor_sum(
			y_max, mul_num, div_num,
			(mul_num - x_max % mul_num) % mul_num, ans
		)
		return ans
	end
end
--[[------------------------------------------------------------------------]]--

local read = io.read
local t = read("n")

local out_t = {}
for i = 1, t do
	out_t[i] = floor_sum(read("n", "n", "n", "n"))
end
print(table.concat(out_t, "\n"))