亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

千萬不要被階乘嚇倒

2020-01-26 16:10:22
字體:
來源:轉載
供稿:網友
階乘(Factorial)是個很有意思的函數,但是不少人都比較怕它,我們來看看兩個與階乘相關的問題:
1、 給定一個整數N,那么N的階乘N!末尾有多少個0呢?例如:N=10,N?。? 628 800,N!的末尾有兩個0。
2、求N!的二進制表示中最低位1的位置。
有些人碰到這樣的題目會想:是不是要完整計算出N!的值?如果溢出怎么辦?事實上,如果我們從"哪些數相乘能得到10"這個角度來考慮,問題就變得簡單了。
首先考慮,如果N!= K×10^M,且K不能被10整除,那么N!末尾有M個0。再考慮對N!進行質因數分解,N!=(2^x)×(3^y)×(5^z)…,由于10 = 2×5,所以M只跟X和Z相關,每一對2和5相乘可以得到一個10,于是M = min(X, Z)。不難看出X大于等于Z,因為能被2整除的數出現的頻率比能被5整除的數高得多,所以把公式簡化為M = Z。
根據上面的分析,只要計算出Z的值,就可以得到N!末尾0的個數。
【問題1的解法一】
要計算Z,最直接的方法,就是計算i(i =1, 2, …, N)的因式分解中5的指數,然后求和:
復制代碼 代碼如下:

ret = 0;
for(i = 1; i <= N; i++)
{
 j = i;
 while(j % 5 ==0)
 {
  ret++;     //統計N的階乘中那些能夠被5整除的因子的個數
  j /= 5;
 }
}

【問題1的解法二】
公式:Z = [N/5] +[N/5^2] +[N/5^3] + …(不用擔心這會是一個無窮的運算,因為總存在一個K,使得5^K > N,[N/5^K]=0。)
公式中,[N/5]表示不大于N的數中5的倍數貢獻一個5,[N/5^2]表示不大于N的數中5^2的倍數再貢獻一個5,……代碼如下:
復制代碼 代碼如下:

ret = 0;
while(N)
{
 ret += N / 5;
 N /= 5;
}

問題2要求的是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],
根據上述分析,得到具體算法,如下所示:
復制代碼 代碼如下:

/*
可以先求出N!中2的個數(因為每存在一個2,則在數的
最低位多1個0)。因此求1的最低位的位置即為N!中2的個數+1;
*/
int lowestOnePos(int n)
{
    int ret = 0;     //統計n!中含有質因數2的個數
    while(n)
    {
        n >>= 1;
        ret += n;
    }
    return ret+1;
}

【問題2的解法二】
N!含有質因數2的個數,還等于N減去N的二進制表示中1的數目。我們還可以通過這個規律來求解。
下面對這個規律進行舉例說明,假設 N = 11011,那么N!中含有質因數2的個數為 N/2 + N/4 + N/8 + N/16 + …
復制代碼 代碼如下:

即: 1101 + 110 + 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的個數

小結
任意一個長度為m的二進制數N可以表示為N = b[1] + b[2] * 2 + b[3] * 22 + … + b[m] * 2(m-1),其中b [ i ]表示此二進制數第i位上的數字(1或0)。所以,若最低位b[1]為1,則說明N為奇數;反之為偶數,將其除以2,即等于將整個二進制數向低位移一位。
相關題目
給定整數n,判斷它是否為2的方冪(解答提示:n>0&&((n&(n-1))==0))。
--------------------------------------------------------------------------------
[1] 這個規律請讀者自己證明(提示N/k,等于1, 2, 3, …, N中能被k整除的數的個數)。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲а∨天堂久久精品喷水| 欧美日韩中国免费专区在线看| 91精品在线一区| 疯狂做受xxxx欧美肥白少妇| 国产精品99久久久久久人| 国产aⅴ夜夜欢一区二区三区| 性亚洲最疯狂xxxx高清| 欧洲成人午夜免费大片| 亚洲精品成人av| 日韩精品视频在线免费观看| 亚洲精品日韩久久久| 成人在线激情视频| 国产成人精品久久二区二区| 国产一区二区三区三区在线观看| 性欧美视频videos6一9| 国产亚洲精品成人av久久ww| 日韩一中文字幕| 国产精品普通话| 欧美成人在线免费视频| 日韩中文在线中文网三级| 国产一区二区三区在线播放免费观看| 久久久久九九九九| 国产97色在线|日韩| 日韩视频免费观看| 中文字幕日韩综合av| 欧美日韩久久久久| 久久久精品国产一区二区| 欧美在线视频观看| 7m第一福利500精品视频| 这里只有精品在线播放| 裸体女人亚洲精品一区| 亚洲qvod图片区电影| 亚洲美女av电影| 亚洲午夜av久久乱码| 精品综合久久久久久97| 日韩精品极品视频免费观看| 日韩精品www| 欧美一区二区三区精品电影| 中文字幕久久久av一区| 国产精品第一区| 国产精品久久久久久久久| 91社区国产高清| 一级做a爰片久久毛片美女图片| 国产午夜精品免费一区二区三区| 亚洲第五色综合网| 欧美中文字幕视频在线观看| 成年人精品视频| 欧美精品在线极品| 欧美成人一二三| 精品免费在线视频| www日韩中文字幕在线看| 国产在线拍揄自揄视频不卡99| 国产丝袜视频一区| 成人黄色av播放免费| 亚洲国产成人精品电影| 亚洲激情免费观看| 亚洲最大福利视频网站| 亚洲天天在线日亚洲洲精| 久久久久久12| 国产欧美一区二区三区久久人妖| 国产精品成人观看视频国产奇米| 国产精品高清在线| 91久久精品久久国产性色也91| 少妇高潮 亚洲精品| 51精品在线观看| 国产91|九色| 欧美放荡办公室videos4k| 国产精品丝袜高跟| 久久精品一本久久99精品| 亚洲欧美制服另类日韩| 国产91在线高潮白浆在线观看| 国产精品美女在线观看| 成人在线免费观看视视频| 午夜精品福利在线观看| 亚洲性视频网址| xxxxx成人.com| 68精品国产免费久久久久久婷婷| 秋霞av国产精品一区| 精品偷拍各种wc美女嘘嘘| 成人有码在线视频| 黄色精品在线看| 91免费看视频.| 91精品国产沙发| 大量国产精品视频| 亚洲国产天堂久久国产91| 在线观看日韩av| 国产亚洲精品久久久久久牛牛| 亚洲成人黄色网| 国产精品久久久久不卡| 中文字幕亚洲自拍| 久久久视频精品| 成人免费观看49www在线观看| 欧美大片在线免费观看| 亚洲日韩欧美视频一区| 日韩av三级在线观看| 亚洲福利视频网站| 国产精品扒开腿做爽爽爽视频| 深夜福利日韩在线看| 欧美性生活大片免费观看网址| 欧美在线一级视频| 欧美久久精品午夜青青大伊人| 国产免费一区二区三区在线能观看| 亚洲午夜未满十八勿入免费观看全集| 尤物精品国产第一福利三区| 成人免费看黄网站| 国产精品久久久久久av下载红粉| 欧美视频在线观看 亚洲欧| 欧美日韩免费观看中文| 亚洲精品电影网在线观看| 韩国三级日本三级少妇99| 久久天天躁狠狠躁老女人| 精品自拍视频在线观看| 精品国产视频在线| 欧美性生活大片免费观看网址| 欧美激情亚洲自拍| 久久成年人视频| 国产成人精品最新| 欧美一级电影免费在线观看| 久久久视频免费观看| 成人美女免费网站视频| 国产精品一区二区久久精品| 国产精品网站入口| 久久精品99无色码中文字幕| 成人在线小视频| 欧美激情在线有限公司| 中文字幕久热精品在线视频| 国产精品99免视看9| 国产一区二区三区免费视频| 久久久久久国产精品三级玉女聊斋| 69久久夜色精品国产69| 国产精品视频精品视频| 国产成人av网| 中文字幕精品网| 国产精品com| 亚洲男子天堂网| 久久99久国产精品黄毛片入口| 国产精品久久久久久超碰| 亚洲色图综合网| 亚洲人成网站在线播| 亚洲人成毛片在线播放| 一区二区三区在线播放欧美| 91精品在线一区| 精品久久久中文| 91免费电影网站| 国产成人精品综合| 日韩国产一区三区| 国产精品嫩草视频| 久久久久久有精品国产| 中文字幕亚洲综合久久筱田步美| 欧美激情欧美激情| 久久成人这里只有精品| www.欧美免费| 97色在线播放视频| 欧美成人在线免费| 精品美女永久免费视频| 91久久精品一区| 欧美老女人bb| 成人精品一区二区三区电影免费| 亚洲激情自拍图| 国产原创欧美精品| 色偷偷亚洲男人天堂| 91麻豆国产精品| 国产精品va在线播放我和闺蜜| 国产97人人超碰caoprom|