pat甲1015 Reversible Primes


#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=100010;
bool p[maxn]={0};//是否是素数标志数组
int prime[maxn],pnum=0;//素数表及素数个数
int str[1000];//进制转换
int len;

void prime_make()//筛法求素数
{
    for(int i=2;i<maxn;i++)
    {
        if(p[i]==0)
        {
            prime[pnum++]=i;
            for(int j=i+i;j<maxn;j=j+i)
            {
                p[j]=1;
            }
        }
    }
}
void make_n(int n,int d)//进制转换
{
    int i=0;
    while(n>=d)
    {
        str[i]=n%d;
        n=n/d;
        i=i+1;
    }
    if(n!=0)//如果有余数则置于最高位
    {
        str[i]=n;
        i=i+1;
    }
    len=i;
}
void reverse_str()
{
    int temp;
    for(int i=0;i<len/2;i++)
    {
        temp=str[i];
        str[i]=str[len-i-1];
        str[len-i-1]=temp;
    }
}
int make_int(int d)//逆序的d进制数转换为int
{
    int sum=0;
    for(int i=0;i<len;i++)
    {
        sum=sum*d+str[i];
    }
    return sum;
}
int main(){
    int n,d,another,flag=1;
    p[1]=1;
    prime_make();//打素数表
    cin>>n;
    while(n>=0)//n非负数停止
    {
        cin>>d;
        flag=1;//是素数标志
        if(p[n]==1)//原数非素数
        {
            flag=0;
        }
        make_n(n,d);//生成转置
        another=make_int(d);//生成int
        if(p[another]==1)//转置的数非素数
        {
            flag=0;
        }
        if(flag==1)//均为素数
        {
            cout<<"Yes"<<endl;
        }
        else
        {
            cout<<"No"<<endl;
        }
        cin>>n;
    }

    return 0;

}

发布了22 篇原创文章 · 获赞 0 · 访问量 197

猜你喜欢

转载自blog.csdn.net/chang_sheng1/article/details/104083400
今日推荐