#include #include #include #include #include #include using namespace std; bool isPrime(int number) { bool isPrime = true; for (int i = 2; i <= number / 2; ++i) { if (number % i == 0) { isPrime = false; break; } } return isPrime; } int largestPrimeFactor(long number) { int i; for (i = 2; i <= number; i++) { if (number % i == 0) { number /= i; i--; } } return i; } int main() { int n; cin >> n; vector a(n); for (int i = 0; i < n; i++) { cin >> a[i]; } /* Enter your code here. Print output to STDOUT */ queue chunk_queue; for(auto bar: a) { chunk_queue.push(bar); } long totalMoves = 0; while(!chunk_queue.empty()) { auto bar = chunk_queue.front(); chunk_queue.pop(); if (bar == 1) { // bar length is 1 so we have to eat it. // it's already been poped from the queue. totalMoves++; } else if(isPrime(bar)) { // bar length is prime. // split into 1s auto num_new_bars = bar; for(auto i =0; i < num_new_bars; i++) { chunk_queue.push(1); } totalMoves++; } else if(!isPrime(bar)) { auto max_prime_factor = largestPrimeFactor(bar); auto new_bar_length = bar / max_prime_factor; for(auto i = 0; i < max_prime_factor; i++) { chunk_queue.push(new_bar_length); } totalMoves++; } } cout << totalMoves << endl; return 0; }