#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; void findPrime(int N, vector& isPrime) { isPrime.assign(N+1, true); isPrime[0] = isPrime[1] = false; for(int i=2; i*i<=N; i++){ if(isPrime[i]){ for(int j=i; i*j<=N; j++){ isPrime[i*j] = false; } } } } int getHash(int a) { while(a >= 10){ int b = 0; while(a > 0){ b += a % 10; a /= 10; } a = b; } return a; } int main() { int k, n; cin >> k >> n; vector isPrime; findPrime(n, isPrime); vector > p; for(int i=k; i<=n; ++i){ if(isPrime[i]) p.push_back(make_pair(i, getHash(i))); } vector cnt(10, 0); int ret = -1; int maxLen = 0; unsigned j = 0; for(unsigned i=0; i 1){ -- cnt[p[j].second]; ++ j; } int len = i - j + 1; if(len >= maxLen){ maxLen = len; ret = p[j].first; } } cout << ret << endl; return 0; }