未知一个数 a,让你每次猜两个数 x 和 y,若 (xmoda)≥(ymoda) 返回 x
,否则返回 y
。让你猜测次数少于 60 次的时候猜出数 a。
1≤a≤109。
首先若 x≤a 且 xmoda≥2xmoda,那么显然 x≤a≤2x。
那么若找到了一个这样的 x,就可以在 [x,2x] 中二分 a,若 midmoda≥2midmoda 则记下答案向上二分,否则向下二分。
考虑怎么找出这样的 x,考虑倍增,从 x=1 开始,若 xmoda<2xmoda,那么让 x→2x,直到找到满足条件的 x 为止。
倍增最多 30 次,二分最多 29 次。