#include using namespace std; bool sieve[1000005]; int primes[80000]; int num_prime=0; void generatePrimes(){ for(int i=0;i<=1000000;i++){ sieve[i] = false; } sieve[0]=true; sieve[1]=true; for (long long i=2;i<=1000000;i++){ if(!sieve[i]){ primes[num_prime++]=i; for(long long j=i;i*j<=1000000;j++){ sieve[i*j]=true; } } } } int findSmallestPrimeDivisor(long long num){ for(int i=0;i a) { // Return the length of the longest possible sequence of moves. int result = 0; long number; long ind_result=0; int divisor; for(int i=0;i1){ divisor = findSmallestPrimeDivisor(number); number = number/divisor; if(ind_result!=1) ind_result = 1 + ind_result*divisor; else ind_result = ind_result + divisor; } result +=ind_result; } return result; } int main() { int n; cin >> n; vector a(n); for(int a_i = 0; a_i < n; a_i++){ cin >> a[a_i]; } generatePrimes(); long result = longestSequence(a); cout << result << endl; return 0; }