擅长:python、mysql、java
<p>考虑一下<a href="http://en.wikipedia.org/wiki/Binary_GCD_algorithm" rel="nofollow">binary GCD algorithm</a>。如果两个操作数的形式都是2<sup>i</sup>-1,则可以大大简化。在</p>
<p>首先,在第一步的末尾显然没有零,所以直接进入循环。在</p>
<p>在循环中,在减法中,您有两个形式为2<sup>i</sup>-1的数字,并且左手边比右手边大,所以减法只重设<code>y</code>中的低位与{<cd2>}中设置的位一样多,也就是说,减法相当于<code>y &= ~x</code>。减法之后紧接着将<code>y</code>右移,后面的零个数是2<sup>i</sup>-1,但是<code>popcnt(x)</code>要短一些。在</p>
<p>由此看来,只有长度(即指数)才是重要的,恒等式<br/>
gcd(2<sup>a</sup>-1,2<sup>b</sup>-1)=2<sup>gcd(a,b)</sup>-1紧随其后。在</p>