求N!的二進位制表示中最低位1的位置。(程式設計之美)

2022-05-30 10:57:08 字數 599 閱讀 4700

要求的是n!的二進位制表示中最低位1的位置。給定乙個整數n,求n!二進位制表示的最低位1在第幾位?例如:給定n = 3,n!= 6,那麼n!的二進位制表示(1 010)的最低位1在第二位。

為了得到更好的解法,首先要對題目進行一下轉化。

首先來看一下乙個二進位制數除以2的計算過程和結果是怎樣的。

把乙個二進位制數除以2,實際過程如下:

判斷最後乙個二進位制位是否為0,若為0,則將此二進位制數右移一位,即為商值(為什麼);反之,若為1,則說明這個二進位制數是奇數,無法被2整除(這又是為什麼)。

所以,這個問題實際上等同於求n!含有質因數2的個數+1。即答案等於n!含有質因數2的個數加1。 實際上n!都為偶數,因為質因數裡面都有乙個2,除了1以外,因為1的階乘是1,是個奇數,其他數的階乘都是偶數。。

【問題2的解法一】

由於n! 中含有質因數2的個數,等於 n/2 + n/4 + n/8 + n/16 + …[1],

根據上述分析,得到具體演算法,如下所示:

int lowestone(int

num)

return res+1;//

m為n!中質因數2的個數,所以最後結果要加 1

}

不要被階乘嚇倒(二進位制表示中最低位1的位置 )

原文 統計乙個整數n的因子個數的方法 將n進行素因子分解,n q1 r1 q2 r2 qi ri 則n的因子數為 r1 1 r2 1 ri 1 階乘 factorial 是個很有意思的函式,但是不少人都比較怕它,我們來看看兩個與階乘相關的問題 1 給定乙個整數n,那麼n的階乘n!末尾有多少個0呢?例...

1的二進位制表示

我們已經知道計算機中,所有資料最終都是使用二進位制數表達。我們也已經學會如何將乙個10進製數如何轉換為二進位制數。不過,我們仍然沒有學習乙個負數如何用二進位制表達。比如,假設有一 int 型別的數,值為5,那麼,我們知道它在計算機中表示為 00000000 00000000 00000000 000...

演算法實踐 二進位制中最低位的位置

給定乙個16位的十進位制數,請把該數轉換為二進位制數來看待。請找到該數看為二進位制後,其最低位的1出現的位置。也就是這個數最低位的1是二進位制中的第幾位呢?以1開頭的二進位制數的十進位制表示b.例如輸入9.輸出k,表示b中的1在第k位 k 0,1,2 15 9的最低位的1出現在位置0.90中,low...