簡單思維題 末尾零

2022-04-04 22:30:42 字數 689 閱讀 4222

定義階乘:n!=1*2*…*n

給定n,求n!末尾的0的個數。

例如:當n=10,n!=3628800,末尾0的個數為2。

輸入共一行,乙個正整數n(n<=10^9)。

輸出共一行,包含乙個整數,表示對應答案。

15

3

思路:n!可以寫成質因數分解的形式即n!=(2^x)*(3^y)*(5^z)...,顯然這裡面的乙個2與乙個5相乘能使末尾產生乙個0,那麼末尾0的個數就是min(x,z),

由於在1~n中能被2整除的數多於能被5整除的數,則x>z,即min(x,z)=z,那我們就只需要計算n!的因子5的個數即可。

因子5的個數有兩種演算法:1.計算從1到n的每乙個數里有多少個5,求和

2.帶入公式(n/5)+(n/25)+...+(n/[5^k])([5^k]<=n)即可得因子5得個數(n/5表示1~n裡是5的倍數的數有幾個,n/25表示1~n裡是25的倍數的數有幾個,以此類推)

ac**:

#include #include

using

namespace

std;

intmain()

printf(

"%d\n

",ans);

return0;

}

簡單思維題 小球

n個小球排成一列,第i個小球的顏色是ci。定義小球i和小球j的距離為 ci cj i j 求所有小球之間距離的和。第1行,1個整數n。第2行,n個整數c1,c2,cn。1個整數,表示所求的值。5 0 1 1 0 1 11 對於60 的資料,n 103 對於100 的資料,1 n 105,0 ci 1...

組合數末尾的零

c m,n m m n n 將組合數c m,n 寫成二進位制數,這個二進位制數末尾有多少個零?自然數可以進行質因數分解,質因子2的指數即相應二進位制末尾零的個數 將各個數二進位制末尾0的個數累加,得到階乘數末尾0的個數。優化 include int f int main printf d n ans...

階乘末尾零的個數

請設計乙個演算法,計算n的階乘有多少個尾隨零。給定乙個int n,請返回n的階乘的尾零個數。保證n為正整數。測試樣例 5返回 1 思路 對n 進行質因數分解,n 2的x次方 3的y次方 5的z次方 因為10 2 5,所以末尾零的個數只與x和z相關,每一對2和5相乘可以得到乙個10,因為x大於等於z,...