#include using namespace std; #define ll long long vectorprimes; long long readInt () { bool minus = false; long long result = 0; char ch; ch = getchar(); while (true) { if (ch == '-') break; if (ch >= '0' && ch <= '9') break; ch = getchar(); } if (ch == '-') minus = true; else result = ch-'0'; while (true) { ch = getchar(); if (ch < '0' || ch > '9') break; result = result*10 + (ch - '0'); } if (minus) return -result; else return result; } void simpleSieve(long long limit, vector &prime){ bool mark[limit+1]; memset(mark, true, sizeof(mark)); for (long long p=2; p*p segmentedSieve(long long n){ long long limit = floor(sqrt(n))+1; vector prime; simpleSieve(limit, prime); long long low = limit; long long high = 2*limit; while (low < n){ bool mark[limit+1]; memset(mark, true, sizeof(mark)); for (long long i = 0; i < prime.size(); i++){ long long loLim = floor(low/prime[i]) * prime[i]; if (loLim < low) loLim += prime[i]; for (long long j=loLim; j= n) high = n; } return prime; } bool isPrime(long long n){ for(int i=0;i