#include #include #include #include #include #include #include using namespace std; map mp; bool isPrime(long long x) { for(long long i=2;i<=sqrt(x);i++) { if(x%i == 0) return false; } return true; } long long getMax(long long x) { if(x==0)return 0; if(mp.find(x)==mp.end()) { if(isPrime(x)) { mp.insert(pair(x, x+1)); //cout<<"inserting "< fac; for(long long i=2; i<=sqrt(x) ; i++) { if(x%i == 0) { fac.push_back(i); if(i != sqrt(x)) fac.push_back(x/i); } } sort(fac.begin(), fac.end()); for(long long i=0; i maxValue ) { number = fac[i]; maxValue = z; } } //cout<(x, maxValue+1)); //cout<<"inserting "< p = *mp.find(x); return p.second; } } int main() { mp.insert(pair(1, 1)); int n; cin >> n; vector a(n); for (int i = 0; i < n; i++) { cin >> a[i]; } long long sum =0; for(int i=0; i