1.如何求算N!的二进制表示最低位1的位置。
2.如何用最简便最快的方法判断一个正整数是否是2的方幂。
对于第一个问题:对于任何一个整数n,当表示成二进制时,若最低位为1,则该数肯定是奇数,否则为偶数。若是奇数,则n肯定不含质因子2.例如9的二进制形式是1001,最后一位位1,则肯定不含因子2,而12的二进制形式是1100,则肯定含因子2.但是将1100右移2位就变成0011,即将12除以2^2,此时0011为奇数。从这里可以发现一个规律,要求一个数的二进制表示形式最低位1的位置,相当于求算n有多少个因子2。因为假如一个整数表示成二进制是r0r1r2.....rk.....rn,如果rk是最低位为1的位置,那么从r(k+1)到rn都为0,此时将其右移(n-k)位,则rk在最低位,此时该二进制必定不包含因子2,而将二进制右移1位相当于除以2,即求算rk的位置相当于求算因子2的个数。而求算N!中含有2的个数很容易求算。
Read full article from 两个与位运算有关的小问题 - 海 子 - 博客园
No comments:
Post a Comment