HDOJ-1124 Factorial 数论
题意哇:求N!末尾多少个0。
很容易想到转化为求N!中5因子的个数。但是从数据范围来看必然不可能一个一个算出来。
所以这里借用数论的一个知识。
如果p是素数,那么n!中p因子的个数可以表示为1-n中整除p^1的个数+1-n中整除p^2的个数...(p^x<=n)
而不难看出,1-n中整除p的个数小于等于n/p,而借助C语言中int除法向下取整的特点,n/p即可。同理p^2等也可这样得出。
来来来,上代码:
#include <iostream> #define LL long long int using namespace std; int main() { cin.sync_with_stdio(false); LL t,n; cin>>t; while(t--) { cin>>n; LL ans=0; while(n) ans+=n/5,n/=5; cout<<ans<<endl; } return 0; }