1015 Reversible Primes
20分的题居然要预处理素数,记得数组开100005。
这题有个小坑就是输入进去的数是按十进制数判断素数,反转的时候是先把它变成d进制数,再反转,再求其十进制数。
#include<iostream> #include<algorithm> #include<cstdio> #include<cmath> #include<string.h> #define maxn 100005 using namespace std; int s[10]; int n,d; int is_prime[maxn]; void get_prime() { for(int i=0;i<maxn;i++) is_prime[i]=1; is_prime[0]=is_prime[1]=0; for(int i=2;i<maxn;i++) { if(is_prime[i]) { for(int j=i*2;j<maxn;j=j+i) { is_prime[j]=0; } } } } int main() { get_prime(); while(scanf("%d",&n)!=EOF) { if(n<0) break; scanf("%d",&d); if(!is_prime[n]) { printf("No\n"); continue; } int p=0; int tn=n; while(tn) { int tmp=tn%d; s[p++]=tmp; tn=tn/d; } int ans=0; for(int i=p-1;i>=0;i--) ans+=s[i]*pow(d,p-1-i); if(is_prime[ans]) printf("Yes\n"); else printf("No\n"); } return 0; }