题解:B4463 [海淀区入门组 2025] 素数和回文数
luogu_LiuShaRui · · 题解
题解:B4463 [海淀区入门组 2025] 素数和回文数
link
思路
看到题目,我们不难想到
提示点
- 质数的时候不能判断
1 。 - 因为要判断最大值,通过暴力算法以及计算,只需要枚举的
2 \times 10^6 即可。code
#include<bits/stdc++.h> #define int long long using namespace std; bool is_palindrome(int a){ int b=a; int ans=0; while(b){ ans*=10; ans+=b%10; b/=10; } return a==ans; } int f[2000005]; void init_sieve(){ memset(f,0,sizeof(f)); f[0]=f[1]=1; for(int i=2;i<=2000000;++i){ if(f[i]==0){ for(int j=i*2;j<=2000000;j+=i){ f[j]=1; } } } } bool is_prime(int a){ return f[a]==0; } signed main(){ int p,q; cin>>p>>q; int z=0,h=0; int max2=0; init_sieve(); for(int i=1;i<=2000000;++i){ if(is_palindrome(i))h++; if(i!=1&&is_prime(i))z++; if(z*q<=h*p){ max2=max(max2,i); } } cout<<max2; return 0; }