CodeForces #315 (div1) A.Primes or Palindromes?

来源:互联网 发布:apache ddos ip 大量 编辑:程序博客网 时间:2024/06/06 01:16

题目大意:

求出最大的n,使得小于等于n的素数的个数<A*小于等于n的回文数的个数。


解题思路:

显而易见一定有答案。

因为A的值很小,而且回文数的个数很少,所以素数打表暴力统计,回文数暴力判断。

n的最大值大概是130w的样子,倒着枚举就可以了。


#include <bits/stdc++.h>#define LL long longusing namespace std;const int N=8000005, mx=8000000;bool np[N];int p[N],pcnt,sum[N];inline int get(int x) {int y=0;for(int t=x;t;t/=10) {(y*=10)+=t%10;}return x==y;}void init() {for(int i=2;i<=mx;++i) {if(!np[i]) {p[pcnt++]=i;sum[i]=1;}for(int j=0; j<pcnt; ++j) {LL t=(LL)p[j]*i;if(t>mx) {break;}np[t]=1;if(i%p[j]==0) {break;}}}for(int i=2;i<=mx;++i) {sum[i]+=sum[i-1];}p[0]=0;for(int i=1;i<=mx;++i) {p[i]=p[i-1]+get(i);}}int main() {int P, q;scanf("%d%d",&P,&q);init();for(int i=mx;i>=1;--i) {if((LL)q*sum[i]<=(LL)P*p[i]) {printf("%d\n",i);return 0;}}puts("Palindromic tree is better than splay tree");return 0;}


0 0
原创粉丝点击