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;
}
View Code

 

posted on 2018-12-09 21:23  FTA_Macro  阅读(163)  评论(0编辑  收藏  举报

导航