#include #define MAX 200000 void make_prime_list(); int search(); //int hash(int); int m, n; int table[MAX + 1]; // 0, 1番目は無視 int prime[MAX], p_cnt; int main(void) { scanf("%d%d", &m, &n); make_prime_list(); printf("%d\n", search()); return 0; } void make_prime_list() { int i; for(i = 2; i <= n; i++) { if(table[i] == 0) { // 0のときにiは素数 if(m <= i) { prime[p_cnt] = i; p_cnt++; } int multi = 2 * i; while(multi <= MAX) { table[multi] = 1; multi += i; } } } return; } int search() { int memo[9], max_l = 0, max_p; int i, j; for(i = p_cnt - 1; 0 <= i; i--) { for(j = 0; j < 9; j++) { memo[j] = 0; } j = i; while(j < p_cnt) { if( memo[ prime[j] % 9 ] ) { break; } memo[ prime[j] % 9 ]++; j++; } if(max_l < j - i) { max_l = j - i; max_p = prime[i]; } } return max_p; } /* よく考えたらいらなかったやつ (hash(x) は x%9 と同一視できる(0を9とみなせばよい)) int hash(int x) { if(x < 10) { return x; } int sum = 0; while(x) { sum += x % 10; x /= 10; } return hash(sum); } */