#include #include #include #include #include #include using namespace std; vectora; void SieveOfEratosthenes(long long n) { // Create a boolean array "prime[0..n]" and initialize // all entries it as true. A value in prime[i] will // finally be false if i is Not a prime, else true. bool prime[n+1]; memset(prime, true, sizeof(prime)); for (int p=2; p*p<=n; p++) { // If prime[p] is not changed, then it is a prime if (prime[p] == true) { // Update all multiples of p for (int i=p*2; i<=n; i += p) prime[i] = false; } } // Print all prime numbers for (long long p=2; p<=n; p++) if (prime[p]) a.push_back(p); } long long lowestfac(long long n){ for(vector::iterator itr=a.begin();itr!=a.end();++itr){ if(n%(*itr)==0) return *itr; } return n; } long long cost(long long n){ if(n==1) return 1; if(n==2) return 3; long long counter=lowestfac(n); return n+cost(n/counter); } 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 */ SieveOfEratosthenes(pow(10,6)); long long sum=0; for(int i=0;i