197. 阶乘分解 #include <iostream> #include <algorithm> using namespace std; const int N = 1e6 + 5; typedef long long ll; int prime[N]; bool is_prime[N]; int sieve(int n) { int cnt = 0; for (int i = 0; i <= n; i++) is_prime[i] = 1; is_prime[0] = is_prime[1] = 0; for (ll i = 2; i <= n; i++){ if (is_prime[i]){ prime[cnt++] = i; for (ll j = i * i; j <= n; j += i) is_prime[j] = 0; } } return cnt; } int main(void) { int n, cnt; ll p, num; cin >> n; cnt = sieve(n); for (int i = 0; i < cnt; i++){ p = prime[i]; num = 0; for (ll j = p; j <= n; j *= p){ num += n / j; } cout << p << ' ' << num << endl; } return 0; }