#include #include #include #include #include #include #include #include #include #include #include using namespace std; vector getPrimes(int n) { vector isPrime(n+1, true); for (int i = 2; i <= n; i++) if (isPrime[i]) for (int j = i+i; j <= n; j += i) isPrime[j] = false; vector primes; for (int i = 2; i <= n; i++) if (isPrime[i]) primes.push_back(i); return primes; } vector factorize(int n) { vector res; for (int i = 2; i*i <= n; i++) if (n%i == 0) { while (n%i == 0) n /= i; res.push_back(i); } if (n != 1) res.push_back(n); return res; } int main() { int n; cin >> n; vector primes = getPrimes(n); vector> factotials(n+1); for (int i = 2; i <= n; i++) factotials[i] = factorize(i); //for (int i = 2; i <= n; i++) { cout << i << " : "; for (auto f : factotials[i]) cout << f << " "; cout << endl; } int m = primes.size(); vector dp(1<