牛牛最近迷上了GCD(最大公约数),好奇的他想知道在[1,n]整数区间中的所有整数对中(每个整数对中数都不同),最大的GCD是多少?
只不过牛牛无法解决该问题,他打算求助于你,给定一个n,返回[1,n]整数区间中的所有整数对中最大的GCD。

这题如果我们暴力的去求解,时间复杂度上是不允许通过的。只不过我们可以去思考关于[1,n]所有整数对中最大的GCD是否包含某种规律,我们可以尝试着去归纳,例如:
n = 2 , MAX(GCD) = 1
n = 3 , MAX(GCD) = 1
n = 4 , MAX(GCD) = 2
n = 5 , MAX(GCD) = 2
那么规律显而易见了,n为奇数,答案为(n-1)/2,反之为n/2。
时间复杂度图片说明
空间复杂度图片说明
代码如下:

class Solution {
public:
    /**
     * 返回[1,n]整数区间中的所有整数对中最大的GCD。
     * @param n int整型 代表[1,n]整数区间的右边界
     * @return int整型
     */
    int solve(int n)
    {
        // write code here
        if (n % 2)
            n--; 
        return n / 2;
    }
};