Propulsé par: NEFU AB-IN
Annuaire d'articles
4949. Des zéros consécutifs à la fin
-
sens du titre
Étant donné un entier positif m, comptez le nombre d'entiers positifs n satisfaits, le nombre de 0 consécutifs à la fin de la factorielle de n est exactement m, et affichez le nombre de n qui remplissent la condition
et tous les n qui remplissent la condition
Par exemple, lorsque m=1 , il y a 5 entiers positifs n remplissant les conditions, à savoir 5, 6, 7, 8, 9, parmi lesquels 5!=120,6!=720,7!=5040,8! =40320,9!=362880 -
train de pensée
Par rapport au problème factoriel classique,
le nombre de 0 à la fin d'un certain nombre = le nombre de 2 et 5 dans le facteur premier.
Combien y a-t-il de facteurs premiers p dans la factorielle de la valeur minimale n : j'ai écrit la formule avant, la complexité de log(n) -
le code
/* * @Author: NEFU AB-IN * @Date: 2023-04-09 17:17:53 * @FilePath: \Acwing\98cp\c\test.cpp * @LastEditTime: 2023-04-09 18:35:14 */ #include <bits/stdc++.h> using namespace std; #define int long long #undef int #define SZ(X) ((int)(X).size()) #define ALL(X) (X).begin(), (X).end() #define IOS \ ios::sync_with_stdio(false); \ cin.tie(nullptr); \ cout.tie(nullptr) #define DEBUG(X) cout << #X << ": " << X << '\n' typedef pair<int, int> PII; const int N = 1e9 + 10, INF = 0x3f3f3f3f; // n的阶乘有多少质因子p int func(int n, int p) { int ans = 0; while (n) ans += n / p, n /= p; return ans; } signed main() { IOS; int m; cin >> m; vector<int> v; for (int i = 1; i <= N; ++i) { int res = min(func(i, 2), func(i, 5)); if (res == m) v.push_back(i); else if (res > m) break; } cout << SZ(v) << '\n'; for (auto i : v) cout << i << " "; return 0; }