#include #include using namespace std; typedef pair pairType; const int MAX = 1000000; const int NUM_PRIMES = 78498; static vector isPrime(MAX,true); static vector prime; void sieve() { isPrime[0] = isPrime[1] = false; int count = 0; for (long i = 2; i < MAX; ++i) { if (isPrime[i]) { for (long j = i*i;j < MAX ; j = j+i) { isPrime[j] = false; } count++; prime.push_back(i); } } //cout << "Count " << count << endl; //cout << "MAX " << MAX << endl; } vector factorize(long n) { vector factors; int idx = 0; for (int i = 0; i < NUM_PRIMES ; ++i) { int count = 0; if (n == 1) { break; } while (n % prime[i] == 0) { count++; n /= prime[i]; } if (count > 0) { factors.push_back(pairType(prime[i],count)); } } if (n > 1) { factors.push_back(pairType(n,1)); } return factors; } long calcMoves(long n) { if (n == 1l) { return 1l; } vector factors = factorize(n); long moves = 1l; for (int i=0;i a) { // Return the length of the longest possible sequence of moves. long sum = 0l; for (int i = 0 ; i < a.size(); ++i) { sum += calcMoves(a[i]); } return sum; } int main() { sieve(); /* for (int i=0;i < 25;++i) { cout << prime[i] << endl; } vector factors = factorize(343); for (int i = 0; i < factors.size(); ++i) { cout << "Factor: " << factors[i].first << " Exp: " << factors[i].second << endl; }*/ int n; cin >> n; vector a(n); for(int a_i = 0; a_i < n; a_i++){ cin >> a[a_i]; } long result = longestSequence(a); cout << result << endl; return 0; }