#CF2041F. 线段折叠
线段折叠
F. 线段折叠
每测试点时间限制: 秒
每测试点内存限制: MB
Peter 喜欢折叠线段。数轴上有一条线段,占据区间 。现在到了折叠线段的黄金时间,Peter 决定小心地折叠这条线段。每一步中,只要可能,他会选择以下两种操作之一:
-
操作 LTR(从左向右折):他将线段从左向右折叠,使得左端点 与某个点 ()重合,且 是质数 *。
Peter 选择此操作时,总是选择 最大的可能 。
注意折叠后,线段变为区间 。 -
操作 RTL(从右向左折):他将线段从右向左折叠,使得右端点 与某个点 ()重合,且 是质数。
Peter 选择此操作时,总是选择 最小的可能 。
注意折叠后,线段变为区间 。
折叠序列 指上述操作的一个序列。
Peter 希望经过若干次折叠后,得到 长度不能再缩短的区间,并且这个最终区间的长度在所有可能折叠方式中是最短的。
区间的长度定义为 。
例如:初始区间 ,有以下三种折叠序列能得到最短的最终区间长度,如下图所示:(此处省略图)
请帮助 Peter 计算出 能得到最短最终区间长度的折叠序列 的数量。输出结果对 取模。
*注:整数 是质数,如果不存在大于 的整数 使得 。
输入
第一行一个整数 ,表示测试用例数量。
接下来 行,每行两个整数 和 。
数据范围:
输出
对于每个测试用例,输出一行,表示能获得最短最终区间长度的折叠序列数量,对 取模。
样例
输入:
3
1 30
16 18
142857 240135
输出:
3
1
63