题解 CF1114C 【Trailing Loves (or L'oeufs?)】

皎月半洒花

2019-03-02 07:35:14

Solution

一道比较简单的题……但是我当时写挂了qaq 我们发现对于一个数$n$,在$k(k\geq 2)$进制下,其中后导$0$的个数其实就是 $$ n = k^p\cdot w $$ 保证$p$极大,那么$p$就是答案。 现在是阶乘的话,就需要我们先分解一下$B$,然后枚举质因数,算一下$\log_{p_i}N$,然后对于所有的幂都算出贡献,然后对所有质因数的$res$取$min$,然后就完了。 对了,先有`long long`后有天,`Inf`不开`1e18`赛神仙( ```cpp #include <cmath> #include <cstdio> #include <iostream> using namespace std ; #define ll long long #define MAXN 3000000 #define Inf 1e18 double Log ; ll Ans = 1ll * 4 * Inf, N, B, T, Fac[MAXN], Gs[MAXN], t, i, tot, j ; int main(){ cin >> N >> B ; ll root = sqrt(B) + 1 ; for (i = 2 ; i <= root ; ++ i){ if (B % i) continue ; T = 0 ; while (!(B % i)) B /= i, ++ T ; Gs[++ tot] = T, Fac[tot] = i ; } if (B > 1) Fac[++ tot] = B, Gs[tot] = 1 ; Log = log((double)N) ; for (i = 1 ; i <= tot ; ++ i){ T = 0, t = Fac[i] ; int u = (ll)((double)log((double)N) / log((double)t)) ; for (j = 1 ; j <= u ; ++ j, Fac[i] *= t) T += N / Fac[i] ; Ans = min(Ans, T / Gs[i]) ; } cout << Ans << endl ; } ```