Rikhail Mubinchik believes that the current definition of prime numbers is obsolete as they are too complex and unpredictable. A palindromic number is another matter. It is aesthetically pleasing, and it has a number of remarkable properties. Help Rikhail to convince the scientific community in this!
Let us remind you that a number is called prime if it is integer larger than one, and is not divisible by any positive integer other than itself and one.
Rikhail calls a number a palindromic if it is integer, positive, and its decimal representation without leading zeros is a palindrome, i.e. reads the same from left to right and right to left.
One problem with prime numbers is that there are too many of them. Let's introduce the following notation: π(n) — the number of primes no larger than n, rub(n) — the number of palindromic numbers no larger than n. Rikhail wants to prove that there are a lot more primes than palindromic ones.
He asked you to solve the following problem: for a given value of the coefficient A find the maximum n, such that π(n) ≤ A·rub(n).
The input consists of two positive integers p, q, the numerator and denominator of the fraction that is the value of A (,
).
If such maximum number exists, then print it. Otherwise, print "Palindromic tree is better than splay tree" (without the quotes).
1 1
40
1 42
1
6 4
172
#define N 1200050 #define M 100005 #define maxn 205 #define MOD 1000000000000000007 int n,np[N],hp[N],num[30],nn; bool pri[N]; int isHp(int x){ int xx = x; nn = 0; while(x){ num[nn++] = x % 10; x/=10; } for(int i = 0;i<nn/2;i++){ if(num[i] != num[nn - 1 - i]) return 0; } //printf("%d ",xx); return 1; } void init(){ fill(pri,true); for(int i =2;i<N;i++){ if(pri[i]){ for(int j = i + i;j<N;j+=i){ pri[j] = false; } } } np[0] = np[1] = 0; for(int i = 2;i<N;i++){ np[i] = np[i-1]; if(pri[i]) np[i]++; } hp[0] = 0; for(int i = 1;i<N;i++){ hp[i] = hp[i-1] + isHp(i); } //for(int i =0;i<100;i++) //int i = N - 1; //{ // printf("%d %d %f\n",np[i],hp[i],(double)np[i]/(double)hp[i]); //} } int main() { init(); //freopen("in.txt", "r", stdin); //freopen("out.txt", "w", stdout); int p,q; //printf("%d %d \n",np[0],hp[0]); while(S2(p,q)!=EOF) { bool flag = true; for(int i = N - 1;i >= 0 && flag;i--){ if(q * np[i] <= p * hp[i]){ flag = false; printf("%d\n",i); } } if(flag){ printf("Palindromic tree is better than splay tree\n"); } } //fclose(stdin); //fclose(stdout); return 0; }
大规模