#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;
}
pat甲1015 Reversible Primes
最新推荐文章于 2022-07-27 16:13:26 发布