题目链接: 点击打开链接
题意:
π(
n
)表示不大于n的素数个数,
rub
(
n
)表示不大于n的回文数个数,求最大n,满足
π(n) ≤ A·rub(n)。A=p/q;
题解:根据数据克制暴力打表是可以的.
#include
using namespace std;
//给你两个数p,q;找出满足n的素数*p <= n的回文数*q的n的值
const int maxn = 1e7+10;
bool prime[maxn];
void getprime(){
prime[0] = prime[1] = false;
for(int i = 2 ; i < maxn ; i ++){
if(prime[i]){
for(int j = i + i ; j < maxn ; j += i)
prime[j] = false;
}
}
}
int pan(int n){
int rn = 0;
int temp = n;
while(temp){
rn *= 10;
rn += temp%10;
temp/=10;
}
if(rn == n) return 1;
else return 0;
}
int main(){
memset(prime,true,sizeof(prime));
getprime();
double p,q;
int ans;
while(~scanf("%lf%lf",&p,&q)){
ans = 0;
int pp = 0,qq = 0;
for(int i = 1; i < maxn ; i ++){
pp += prime[i];
qq += pan(i);
if(qq* p/q >= pp)
ans = i;
}
cout << ans << endl;
}
}