Trailing Zeros (计算 1 ~ n 中质因子 p 的数量)
题目:
思路:
本题让我们求 n阶乘 后末尾 0 的个数
首先我们要明白末尾 0 的个数取决于 因子 2 和因子 5 中的较小值,所以我们关键点在于如何求出二者的数量
根据数学原理,我们可以分层计算某个质因子 p 在 1 ~ n 的个数,具体的,我们每次计算 n 中有多少个数是 的个数,然后不断增加 k 和累加答案即可,总结就是
具体实现看代码,十分简单明了
代码:
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define yes cout << "YES\n"
#define no cout << "NO\n"
mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());int getp(int x,int p)
{int cnt = 0;int now = p;while(now <= x){cnt += x / now;now*=p;}return cnt;
}void solve()
{int n;cin >> n;cout << min(getp(n,2),getp(n,5));
}signed main()
{ios::sync_with_stdio(false);cin.tie(nullptr);int t = 1;while (t--){solve();}return 0;
}