CodeForces - 568 A Primes or Palindromes? (打表+暴力)

题目链接: 点击打开链接
题意: π( 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;
	}
}

你可能感兴趣的:(CodeForces)