#include using namespace std; bool isprime[1000005]; vector prime; void sieve(int mxn){ memset(isprime,1,sizeof(isprime)); isprime[1] = false; for(int i=2; i*i<=mxn; i++){ for(int j=i*i; j<=mxn; j+=i) isprime[j] = false; } for(int i=1; i<=mxn; i++){ if(isprime[i]) prime.push_back(i); } } long long getAnswer(long long x){ vector > divisors; long long result = x; long long tmp = x; for(int i=0; i 0){ divisors.push_back(make_pair(prime[i], counter)); } } if(tmp > 1) divisors.push_back(make_pair(tmp, 1)); long long cur = 1; for(int i=divisors.size()-1; i>=0; i--){ for(int j=0; j a) { // Return the length of the longest possible sequence of moves. long long result = 0; for(int i=0; i> n; vector a(n); for(int a_i = 0; a_i < n; a_i++){ cin >> a[a_i]; } long long result = longestSequence(a); cout << result << endl; return 0; }