51nod1003階乘後邊0的數量
阿新 • • 發佈:2018-12-01
題目描述 連結戳這裡
解法:
《程式設計之美》書裡有講
N!能產生0的質數組合只能是2 * 5,也就是說當對N!進行質數分解之後
N!末尾 0 的個數取決於從 1 到 n 的各個數的因子中 2 和 5 的個數的較小的那個,但又因為能被2整除的數出現的頻率比能被5整除的數高得多,且出現一個5的時,最少會同時出現一個2,所以最小值就是5出現的個數。即求出5出現的個數就可以得到N!末尾0的個數。
求5出現的個數
n的階乘 就是 1x2x3x4x5x6........xn
各個因子中5的個數 就是 n累除以5 得到的數字累加 直到 得到0
比如 25 = 1x2x3x4x5x6......x25 這裡面每個數進行質因數分解 會得到6個五,其中5,10,15,20各自有一個 25有兩個
25/5 =5 5/5=1 1/5=0 5+1+0=6;
為什麼 這樣解呢 因為 分解質因數後 5,10,15,20各自貢獻一個 25貢獻兩個 125 貢獻三個 以此類推
所以 這裡面出現的5的次數 就是 =【n/5】+【n/25】+【n/125】......
所以就是n累除5 計數就好了
程式碼
#include<stdio.h> #include<iostream> #include<algorithm> #include<string.h> const int maxn=1e5+7; typedef long long ll; ll n; int main(){ scanf("%lld",&n); ll sum=0; while(n){ sum+=n/5; n/=5; } printf("%lld",sum); return 0; }