数论只会Gcd
题号:NC232628
时间限制:C/C++/Rust/Pascal 6秒,其他语言12秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

有这样一段两两求最大公约数的程序CoGcd,
int Gcd(int x, int y)
{
    if(y == 0)
        return x;

    return Gcd(y, x % y);
}

void CoGcd(int m)
{
    for(int i = 1; i <= m; i++)
    {
        for(int j = 1; j <= m; j++)
        {
            Gcd(i, j);
        }
    }
}

给出m的值,进行t次询问,每次询问包含一对xi,yi。针对每次询问,输出整个程序执行过程当中,Gcd(xi, yi)被执行了多少次。

例如:m = 20,

Gcd(8,5)会被执行4次,对应的x, y值是

(8,5) (5,8) (13,8) (8,13),这4组x y,在调用Gcd时,会递归执行Gcd(8, 5)。

输入描述:

第一行:2个数,t和m,中间用空格分割。(1 <= t <= 200,  10 <= m <= 1e9)
后面t行:每行2个数xi, yi,中间用空格分割。(1 <= xi, yi <= 1e9)

输出描述:

输出共t行,对应t组询问的答案。
示例1

输入

复制
5 20
1 1
2 1
3 2
5 3
8 5

输出

复制
1
88
36
12
4

备注:

原题链接:http://www.51nod.com/Challenge/Problem.html#problemId=2583