编程之美----不要被阶乘吓到
生活随笔
收集整理的這篇文章主要介紹了
编程之美----不要被阶乘吓到
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
任一個正整數都能分解成質數的連乘,因此求N!末尾有多少個0,等于質因數分解之后5的個數,而求5的個數可以用如下代碼實現:
ret =0; while(N) {ret += N/5;N/=5; } View Code5的倍數貢獻一個5,5的平方的倍數再貢獻一個5,如此繼續下去。。。。
問題二:求N!的二進制表示中最低位1的位置,等價于求N! 含有質因數2的個數加1,因為如果將N!表示成2的多少次冪乘以一個數,那么就可以表示成2的多少次冪+2的更多的次冪。于是將上面的代碼稍微修改就可以用來求此問題,另外N!含有質因數2的個數,還等于N減去N的二進制表示中1的數目。假如N=11011,這些0,1都代表二進制,那么
1101(這里可以理解為N/2)+110(N/4)+11+1
=(1000 +100 +1)
+(100 ? +10)
+(10 ? ? +1)
+1
=(1000 +100+10+1) + (100 +10 +1)+1
=1111+111+1
=(10000-1)+(1000-1)+(10-1)+(1-1)=11011-(N二進制表示中1的個數)。
?
相關題目:
給定整數n,判斷它是否為2的方冪。可用(n>0&&((n&(n-1))==0)求解
轉載于:https://www.cnblogs.com/wen-ge/p/4082441.html
總結
以上是生活随笔為你收集整理的编程之美----不要被阶乘吓到的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 检测移动设备横竖屏
- 下一篇: hdu 5095 Linearizati