0
点赞
收藏
分享

微信扫一扫

Codeforces 368 A


​​传送门​​

题目大意




思路

暴力打表求出当前范围内又多少素数和回文数即可

代码

bool vis[maxn];//标记非素数,0是素数
int primer[maxn/10];//存素数
int cnt=0;//记录素数个数,
int sum1[maxn];
void find_primer(){
vis[1]=1;sum1[1]=0;
for(int i=2;i<=maxn;i++){
if(!vis[i])primer[cnt++]=i;
sum1[i]=sum1[i-1]+(!vis[i]);
//cout<<sum1[i]<<endl;
for(int j=0;j<cnt&&primer[j]*i<=maxn;j++){
vis[i*primer[j]]=1;//筛
if(i%primer[j]==0)break;//关键!!!找到i*primer[j]的最小质因子primer[j],退出
}
}
}

int huiwen[maxn],sum2[maxn];

int check(int n){
int a[10];
int qq=0;
while(n>0){
a[++qq]=n%10;
n/=10;
}
for(int i=1;i<=qq/2;i++){
//cout<<a[i]<<' '<<a[qq-i+1]<<endl;
if(a[i]!=a[qq-i+1])return 0;
}
return 1;
}

void find_huiwen(){
for(int i=1;i<=maxn;i++){
if(check(i)){
huiwen[i]=1;
//cout<<i<<endl;
}
sum2[i]=sum2[i-1]+huiwen[i];
}
}

int main(){
find_primer();
find_huiwen();
int q,p;
cin>>p>>q;///A=p/q;
int gcd=__gcd(p,q);
p/=gcd,q/=gcd;
int f;
for(int i=maxn;i>=1;i--)
{
if(q*sum1[i]<=p*sum2[i])
{
f=i;
break;
}
}
if(f==0)puts("Palindromic tree is better than splay tree");
else
cout<<f<<endl;
}


举报

相关推荐

0 条评论