int bisect_left(int s, int e, int val) { int m=(s+e)/2; if(primes[m] ==val) return m+1; if(s==e) return primes[m]>val?m:m+1; if(primes[m]>val) return bisect_left(s,m,val); else return bisect_left(m+1,e,val); }
int solve(int n) { int l=vals[n]; int low=bisect(0,p-1,n-l+1); int high= bisect_left(low,p-1,n); return (high-low); }
template <class A> __ss_int bisect_left(list<A> *a, A x, __ss_int lo=0) { return bisect_left(a, x, lo, len(a)); }