n!末尾有都少個0,首先追本溯源0是怎麼得來的,所有的0都是由質因數2和5相乘得到的。
那麼對所有的n!在內的n個數進行質因數分解,只需要計算2和5的個數,取其中較小的乙個,即能得到n!有多少個0。
(1)要對n個數進行質因數分解,採取最暴力的方式也能解決,當n很大的情況下就不再適用了,那麼有沒有一種方法能夠快速求出這n個數中有多少個2或5呢?
(2)採用縮小範圍的方法,舉例來說要求n!由多少個m(m是質數),那麼首先用n/m=s。那麼這s個數(1--s)*m都能被m整除。同時還有一些數能多次整除m
就將這些數轉到(1--s)範圍內,轉化成求(1--s)有多少個數能被m整除了。
**實現:
/** file: main.cpp
* author: sxw
** created on 2023年8月27日, 下午6:02
*/#include
#include
#include
#include
using namespace std;
/** 求n!末尾有多少個0
*/int fun(int n,int m)
return ans;
}int main(int argc, char** argv) {
int n,ncases;
cin>>ncases;
while(ncases--)
{cin>>n;
cout《注:可以到 測試你寫的**。
求N!末尾有多少個0
思考 該題實際上是求 2 5 因子對的個數。對於任意乙個階乘,5因子的個數總是小於2因子的個數,僅需考慮n 中5因子的個數 方法 1 將該數用 5 除,得到的商取整數。2 然後再用所得商當被除數除以 5,得到的商取整數。3 持續做到商等於 0 為止。4 過程中的商加總即為階乘的尾數 0 的個數。例 ...
求N 中末尾有多少個0
分析 對n進行質因數分解 n 2 x 3 y 5 z.由於10 2 5,所以末尾0的個數只和x與z有關,每一對2和5相乘可以得到乙個10,於是末尾0的個數 min x,z 在實際中x是遠遠大於z的,所以我們只要求出z的值即可。根據公式 z n 5 n 5 2 n 5 3 n 5 k 這表明,5的倍數...
求N 的末尾有多少個零
歷程 今天的題目中有乙個求n 的末尾有多少個零,遇到這道題開始也是很蒙呢,不過一開始我的思路就是對的,中間還發生一段小插曲,就是輸入輸出的行數我看錯了,導致浪費了不少時間在樣例模擬上,不然就首a啦哈哈 想想自己真的好蠢哦 思路 我開始用的算數基本定理來解決的,每乙個數都是可以唯一有若干個素數的乘積得...