#include using namespace std; vector isprime(1002003); vector primes(100100); vector GetPrimeFactor(long n) { int i; vector answer; if (n<2) { return answer; //return empty vector } while (n%2 == 0) { answer.push_back(2); n = n/2; } // n must be odd at this point. So we can skip // one element (Note i = i +2) for (int i = 1; primes[i] <= sqrt(n); i++) //watch for , n < 78498 { //cout << i << ":" << primes[i] << endl; // While i divides n, print i and divide n while ((n%primes[i] == 0) and (primes[i]!=0)) { answer.push_back(primes[i]); n = n/primes[i]; } } if (n>2) {answer.push_back(n);} //for case where n is prime to start with return answer; } void sieve() { long k=0; primes[k++]=2; for(long i=3;i*i<=1002002;i+=2) { if(!isprime[i]) { primes[k++]=i; for(long j=i*i;j<=1002002;j+=i+i) isprime[j] = 1; } } for(long i=1001;i<1002002;i+=2) if(!isprime[i]) primes[k++]=i; } long getBreaks(long n) { if (n==1) return 1; if (n==2) return 3; if (n==3) return 4; long nBreaks=0; //nBreaks+=1; nBreaks+=n; //add both 1 and n to the total //primes should be ordered vector p = GetPrimeFactor(n); long runningProduct = 1; for (int i=0;i a) { long nSum=0; for (long i=0;i> n; vector a(n); for(long a_i = 0; a_i < n; a_i++){ cin >> a[a_i]; } long result = longestSequence(a); cout << result << endl; return 0; }