Loading [MathJax]/jax/output/HTML-CSS/jax.js
编程题
                ### 问题描述

在 C 编程语言中,a &lt; ba + b 一样都是表达式,计算结果为整数。当 a<b 成立时,a &lt; b 的计算结果为 1;当 a<b 不成立时,计算结果为 0。在 C 语言中,0真值定义为“假”,1 的真值定义为“真”(不考虑其他数字的真值)。于是我们发现,C 语言中 a &lt; b 的真值与数学中 a<b 的真值一定相同。

若定义函数 less(a,b) 如下:

\text {less}(a, b) = \left\{ \begin {aligned} 1, & \quad a < b \\ 0, & \quad a \ge b \end {aligned} \right.

则 C 语言计算 a &lt; b 时,实际上计算的是 less(a,b)

然而,C 语言中 a &lt; b &lt; c 的真值与数学中 a<b<c 的真值不总是相同。这是因为:

  • C 语言先计算 a &lt; b 的值,记为 x,再计算 x &lt; c 的值作为结果,等价的数学表达式应该写成 less(a,b)<c
  • 而在数学中,a<b<c 表示 a<bb<c,等价的 C 语言表达式应该写成 a &lt; b &amp;&amp; b &lt; c(其中 &amp;&amp; 表示“且”)。

现在给出整数 AC 的值,请求出满足以下条件的有序数对 a,c 的个数:

  • ac 均为整数。
  • AaACcC
  • 对于一切整数 b,C 语言中 a &lt; b &lt; c 的真值都与数学中 a<b<c 的真值相同(即 less(a,b)<c 当且仅当 a<b<c)。

此处忽略 C 语言整数的范围。

输入格式

第一行包含一个整数 T,表示测试用例的个数。

每个测试用例包含一行,两个用空格隔开的整数 AC

输出格式

对于每个测试用例,输出一行,包含一个整数,表示有序数对 a,c 的个数。

样例输入

6
4 3
5 5
2 3
0 0
17 35
1000000000 1000000000

样例输出

30
56
19
1
1124
1500000003500000001

说明

对于第一个样例,满足条件的有序数对有 4,3, 3,3, 3,2, 2,3, 2,2, 2,1, 1,3, 1,2, 1,1, 1,0, 0,3, 0,2, 0,1, 0,0, 1,3, 1,2, 1,1, 1,0, 2,3, 2,2, 2,1, 2,0, 3,3, 3,2, 3,1, 3,0, 4,3, 4,2, 4,1, 4,030 个。

评测数据规模

对于 20% 的评测数据,1T200A,C103

对于 60% 的评测数据,1T21030A,C105

对于 100% 的评测数据,1T21040A,C109

查看答案
赣ICP备20007335号-2